diff --git a/Assets/Plugins/FairyGUI.meta b/Assets/Plugins/FairyGUI.meta new file mode 100644 index 0000000..6b952de --- /dev/null +++ b/Assets/Plugins/FairyGUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5af0671c5d1d6af44aa29e82ab32d444 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Editor.meta b/Assets/Plugins/FairyGUI/Editor.meta new file mode 100644 index 0000000..9e32d14 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8d62b02f274ce4253af1ef45831279e3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples.meta b/Assets/Plugins/FairyGUI/Examples.meta new file mode 100644 index 0000000..ac1ba24 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fd0c51d2146977c4aa7ab34e712a863d +folderAsset: yes +timeCreated: 1446193142 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag.meta b/Assets/Plugins/FairyGUI/Examples/Bag.meta new file mode 100644 index 0000000..4e90350 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Bag.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 458c4ffa8748140419a56ce3d93de74a +folderAsset: yes +timeCreated: 1446625368 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs b/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs new file mode 100644 index 0000000..1f4d434 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using FairyGUI; + +/// +/// A game bag demo, demonstrated how to customize loader to load icons not in the UI package. +/// +public class BagMain : MonoBehaviour +{ + GComponent _mainView; + BagWindow _bagWindow; + + void Awake() + { + //Register custom loader class + UIObjectFactory.SetLoaderExtension(typeof(MyGLoader)); + } + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + GRoot.inst.SetContentScaleFactor(1136, 640); + _mainView = this.GetComponent().ui; + + _bagWindow = new BagWindow(); + _mainView.GetChild("bagBtn").onClick.Add(() => { _bagWindow.Show(); }); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs.meta new file mode 100644 index 0000000..e6ea036 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Bag/BagMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 72adad54c37cc25499988e9b785d5b90 +timeCreated: 1446194671 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs b/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs new file mode 100644 index 0000000..6b809f6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs @@ -0,0 +1,49 @@ +using FairyGUI; +using UnityEngine; + +public class BagWindow : Window +{ + GList _list; + + public BagWindow() + { + } + + protected override void OnInit() + { + this.contentPane = UIPackage.CreateObject("Bag", "BagWin").asCom; + this.Center(); + this.modal = true; + + _list = this.contentPane.GetChild("list").asList; + _list.onClickItem.Add(__clickItem); + _list.itemRenderer = RenderListItem; + _list.numItems = 45; + } + + void RenderListItem(int index, GObject obj) + { + GButton button = (GButton)obj; + button.icon = "i" + UnityEngine.Random.Range(0, 10); + button.title = "" + UnityEngine.Random.Range(0, 100); + } + + override protected void DoShowAnimation() + { + this.SetScale(0.1f, 0.1f); + this.SetPivot(0.5f, 0.5f); + this.TweenScale(new Vector2(1, 1), 0.3f).OnComplete(this.OnShown); + } + + override protected void DoHideAnimation() + { + this.TweenScale(new Vector2(0.1f, 0.1f), 0.3f).OnComplete(this.HideImmediately); + } + + void __clickItem(EventContext context) + { + GButton item = (GButton)context.data; + this.contentPane.GetChild("n11").asLoader.url = item.icon; + this.contentPane.GetChild("n13").text = item.icon; + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs.meta b/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs.meta new file mode 100644 index 0000000..879d477 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Bag/BagWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 418d0818f0209ee42938610bc6cb82be +timeCreated: 1446193148 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs b/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs new file mode 100644 index 0000000..8f82c6b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs @@ -0,0 +1,188 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using FairyGUI; +#if UNITY_5_4_OR_NEWER +using UnityEngine.Networking; +#endif + +public delegate void LoadCompleteCallback(NTexture texture); +public delegate void LoadErrorCallback(string error); + +/// +/// Use to load icons from asset bundle, and pool them +/// +public class IconManager : MonoBehaviour +{ + static IconManager _instance; + public static IconManager inst + { + get + { + if (_instance == null) + { + GameObject go = new GameObject("IconManager"); + DontDestroyOnLoad(go); + _instance = go.AddComponent(); + } + return _instance; + } + } + + public const int POOL_CHECK_TIME = 30; + public const int MAX_POOL_SIZE = 10; + + List _items; + bool _started; + Hashtable _pool; + string _basePath; + + void Awake() + { + _items = new List(); + _pool = new Hashtable(); + _basePath = Application.streamingAssetsPath.Replace("\\", "/") + "/fairygui-examples/"; + if (Application.platform != RuntimePlatform.Android) + _basePath = "file:///" + _basePath; + + StartCoroutine(FreeIdleIcons()); + } + + public void LoadIcon(string url, + LoadCompleteCallback onSuccess, + LoadErrorCallback onFail) + { + LoadItem item = new LoadItem(); + item.url = url; + item.onSuccess = onSuccess; + item.onFail = onFail; + _items.Add(item); + if (!_started) + StartCoroutine(Run()); + } + + IEnumerator Run() + { + _started = true; + + LoadItem item = null; + while (true) + { + if (_items.Count > 0) + { + item = _items[0]; + _items.RemoveAt(0); + } + else + break; + + if (_pool.ContainsKey(item.url)) + { + //Debug.Log("hit " + item.url); + + NTexture texture = (NTexture)_pool[item.url]; + texture.refCount++; + + if (item.onSuccess != null) + item.onSuccess(texture); + + continue; + } + + string url = _basePath + item.url + ".ab"; +#if UNITY_2017_2_OR_NEWER +#if UNITY_2018_1_OR_NEWER + UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(url); +#else + UnityWebRequest www = UnityWebRequest.GetAssetBundle(url); +#endif + yield return www.SendWebRequest(); + +#if UNITY_2020_2_OR_NEWER + if (www.result == UnityWebRequest.Result.Success) +#else + if (!www.isNetworkError && !www.isHttpError) +#endif + { + AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(www); +#else + WWW www = new WWW(url); + yield return www; + + if (string.IsNullOrEmpty(www.error)) + { + AssetBundle bundle = www.assetBundle; +#endif + + if (bundle == null) + { + Debug.LogWarning("Run Window->Build FairyGUI example Bundles first."); + if (item.onFail != null) + item.onFail(www.error); + continue; + } +#if (UNITY_5 || UNITY_5_3_OR_NEWER) + NTexture texture = new NTexture(bundle.LoadAllAssets()[0]); +#else + NTexture texture = new NTexture((Texture2D)bundle.mainAsset); +#endif + texture.refCount++; + bundle.Unload(false); + + _pool[item.url] = texture; + + if (item.onSuccess != null) + item.onSuccess(texture); + } + else + { + if (item.onFail != null) + item.onFail(www.error); + } + } + + _started = false; + } + + IEnumerator FreeIdleIcons() + { + yield return new WaitForSeconds(POOL_CHECK_TIME); //check the pool every 30 seconds + + int cnt = _pool.Count; + if (cnt > MAX_POOL_SIZE) + { + ArrayList toRemove = null; + foreach (DictionaryEntry de in _pool) + { + string key = (string)de.Key; + NTexture texture = (NTexture)de.Value; + if (texture.refCount == 0) + { + if (toRemove == null) + toRemove = new ArrayList(); + toRemove.Add(key); + texture.Dispose(); + + //Debug.Log("free icon " + de.Key); + + cnt--; + if (cnt <= 8) + break; + } + } + if (toRemove != null) + { + foreach (string key in toRemove) + _pool.Remove(key); + } + } + } + +} + +class LoadItem +{ + public string url; + public LoadCompleteCallback onSuccess; + public LoadErrorCallback onFail; +} diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs.meta b/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs.meta new file mode 100644 index 0000000..57b4178 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Bag/IconManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b5725e4855896724d9bdeb29c68c6c92 +timeCreated: 1446193148 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs b/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs new file mode 100644 index 0000000..67cff27 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using FairyGUI; +using System.IO; + +/// +/// Extend the ability of GLoader +/// +public class MyGLoader : GLoader +{ + protected override void LoadExternal() + { + IconManager.inst.LoadIcon(this.url, OnLoadSuccess, OnLoadFail); + } + + protected override void FreeExternal(NTexture texture) + { + texture.refCount--; + } + + void OnLoadSuccess(NTexture texture) + { + if (string.IsNullOrEmpty(this.url)) + return; + + this.onExternalLoadSuccess(texture); + } + + void OnLoadFail(string error) + { + Debug.Log("load " + this.url + " failed: " + error); + this.onExternalLoadFailed(); + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs.meta b/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs.meta new file mode 100644 index 0000000..2ed88c3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Bag/MyGLoader.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ca2c5718cae50694a8291cc372ad458d +timeCreated: 1446193148 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Basics.meta b/Assets/Plugins/FairyGUI/Examples/Basics.meta new file mode 100644 index 0000000..e55613d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Basics.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7afac4ff0289dac479c37c0cbf60f745 +folderAsset: yes +timeCreated: 1446194671 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs b/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs new file mode 100644 index 0000000..e211ca1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs @@ -0,0 +1,441 @@ +using UnityEngine; +using System.Collections.Generic; +using FairyGUI; + +public class BasicsMain : MonoBehaviour +{ + private GComponent _mainView; + private GObject _backBtn; + private GComponent _demoContainer; + private Controller _viewController; + private Dictionary _demoObjects; + + public Gradient lineGradient; + + void Awake() + { +#if (UNITY_5 || UNITY_5_3_OR_NEWER) + //Use the font names directly + UIConfig.defaultFont = "Microsoft YaHei"; +#else + //Need to put a ttf file into Resources folder. Here is the file name of the ttf file. + UIConfig.defaultFont = "afont"; +#endif + UIPackage.AddPackage("UI/Basics"); + + UIConfig.verticalScrollBar = "ui://Basics/ScrollBar_VT"; + UIConfig.horizontalScrollBar = "ui://Basics/ScrollBar_HZ"; + UIConfig.popupMenu = "ui://Basics/PopupMenu"; + UIConfig.buttonSound = (NAudioClip)UIPackage.GetItemAsset("Basics", "click"); + } + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + _backBtn = _mainView.GetChild("btn_Back"); + _backBtn.visible = false; + _backBtn.onClick.Add(onClickBack); + + _demoContainer = _mainView.GetChild("container").asCom; + _viewController = _mainView.GetController("c1"); + + _demoObjects = new Dictionary(); + + int cnt = _mainView.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject obj = _mainView.GetChildAt(i); + if (obj.group != null && obj.group.name == "btns") + obj.onClick.Add(runDemo); + } + } + + private void runDemo(EventContext context) + { + string type = ((GObject)(context.sender)).name.Substring(4); + GComponent obj; + if (!_demoObjects.TryGetValue(type, out obj)) + { + obj = UIPackage.CreateObject("Basics", "Demo_" + type).asCom; + _demoObjects[type] = obj; + } + + _demoContainer.RemoveChildren(); + _demoContainer.AddChild(obj); + _viewController.selectedIndex = 1; + _backBtn.visible = true; + + switch (type) + { + case "Graph": + PlayGraph(); + break; + + case "Button": + PlayButton(); + break; + + case "Text": + PlayText(); + break; + + case "Grid": + PlayGrid(); + break; + + case "Transition": + PlayTransition(); + break; + + case "Window": + PlayWindow(); + break; + + case "Popup": + PlayPopup(); + break; + + case "Drag&Drop": + PlayDragDrop(); + break; + + case "Depth": + PlayDepth(); + break; + + case "ProgressBar": + PlayProgressBar(); + break; + } + } + + private void onClickBack() + { + _viewController.selectedIndex = 0; + _backBtn.visible = false; + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } + + //----------------------------- + private void PlayGraph() + { + GComponent obj = _demoObjects["Graph"]; + + Shape shape; + + shape = obj.GetChild("pie").asGraph.shape; + EllipseMesh ellipse = shape.graphics.GetMeshFactory(); + ellipse.startDegree = 30; + ellipse.endDegreee = 300; + shape.graphics.SetMeshDirty(); + + shape = obj.GetChild("trapezoid").asGraph.shape; + PolygonMesh trapezoid = shape.graphics.GetMeshFactory(); + trapezoid.usePercentPositions = true; + trapezoid.points.Clear(); + trapezoid.points.Add(new Vector2(0f, 1f)); + trapezoid.points.Add(new Vector2(0.3f, 0)); + trapezoid.points.Add(new Vector2(0.7f, 0)); + trapezoid.points.Add(new Vector2(1f, 1f)); + trapezoid.texcoords.Clear(); + trapezoid.texcoords.AddRange(VertexBuffer.NormalizedUV); + shape.graphics.SetMeshDirty(); + shape.graphics.texture = (NTexture)UIPackage.GetItemAsset("Basics", "change"); + + shape = obj.GetChild("line").asGraph.shape; + LineMesh line = shape.graphics.GetMeshFactory(); + line.lineWidthCurve = AnimationCurve.Linear(0, 25, 1, 10); + line.roundEdge = true; + line.gradient = lineGradient; + line.path.Create(new GPathPoint[] { + new GPathPoint(new Vector3(0, 120, 0)), + new GPathPoint(new Vector3(20, 120, 0)), + new GPathPoint(new Vector3(100, 100, 0)), + new GPathPoint(new Vector3(180, 30, 0)), + new GPathPoint(new Vector3(100, 0, 0)), + new GPathPoint(new Vector3(20, 30, 0)), + new GPathPoint(new Vector3(100, 100, 0)), + new GPathPoint(new Vector3(180, 120, 0)), + new GPathPoint(new Vector3(200, 120, 0)), + }); + shape.graphics.SetMeshDirty(); + GTween.To(0, 1, 5).SetEase(EaseType.Linear).SetTarget(shape.graphics).OnUpdate((GTweener t) => + { + ((NGraphics)t.target).GetMeshFactory().fillEnd = t.value.x; + ((NGraphics)t.target).SetMeshDirty(); + }); + + shape = obj.GetChild("line2").asGraph.shape; + LineMesh line2 = shape.graphics.GetMeshFactory(); + line2.lineWidth = 3; + line2.roundEdge = true; + line2.path.Create(new GPathPoint[] { + new GPathPoint(new Vector3(0, 120, 0), GPathPoint.CurveType.Straight), + new GPathPoint(new Vector3(60, 30, 0), GPathPoint.CurveType.Straight), + new GPathPoint(new Vector3(80, 90, 0), GPathPoint.CurveType.Straight), + new GPathPoint(new Vector3(140, 30, 0), GPathPoint.CurveType.Straight), + new GPathPoint(new Vector3(160, 90, 0), GPathPoint.CurveType.Straight), + new GPathPoint(new Vector3(220, 30, 0), GPathPoint.CurveType.Straight) + }); + shape.graphics.SetMeshDirty(); + + GObject image = obj.GetChild("line3"); + LineMesh line3 = image.displayObject.graphics.GetMeshFactory(); + line3.lineWidth = 30; + line3.roundEdge = false; + line3.path.Create(new GPathPoint[] { + new GPathPoint(new Vector3(0, 30, 0), new Vector3(50, -30), new Vector3(150, -50)), + new GPathPoint(new Vector3(200, 30, 0), new Vector3(300, 130)), + new GPathPoint(new Vector3(400, 30, 0)) + }); + image.displayObject.graphics.SetMeshDirty(); + } + + //----------------------------- + private void PlayButton() + { + GComponent obj = _demoObjects["Button"]; + obj.GetChild("n34").onClick.Add(() => { UnityEngine.Debug.Log("click button"); }); + } + + //------------------------------ + private void PlayText() + { + GComponent obj = _demoObjects["Text"]; + obj.GetChild("n12").asRichTextField.onClickLink.Add((EventContext context) => + { + GRichTextField t = context.sender as GRichTextField; + t.text = "[img]ui://Basics/pet[/img][color=#FF0000]You click the link[/color]:" + context.data; + }); + obj.GetChild("n25").onClick.Add(() => + { + obj.GetChild("n24").text = obj.GetChild("n22").text; + }); + } + + //------------------------------ + private void PlayGrid() + { + GComponent obj = _demoObjects["Grid"]; + GList list1 = obj.GetChild("list1").asList; + list1.RemoveChildrenToPool(); + string[] testNames = System.Enum.GetNames(typeof(RuntimePlatform)); + Color[] testColor = new Color[] { Color.yellow, Color.red, Color.white, Color.cyan }; + int cnt = testNames.Length; + for (int i = 0; i < cnt; i++) + { + GButton item = list1.AddItemFromPool().asButton; + item.GetChild("t0").text = "" + (i + 1); + item.GetChild("t1").text = testNames[i]; + item.GetChild("t2").asTextField.color = testColor[UnityEngine.Random.Range(0, 4)]; + item.GetChild("star").asProgress.value = (int)((float)UnityEngine.Random.Range(1, 4) / 3f * 100); + } + + GList list2 = obj.GetChild("list2").asList; + list2.RemoveChildrenToPool(); + for (int i = 0; i < cnt; i++) + { + GButton item = list2.AddItemFromPool().asButton; + item.GetChild("cb").asButton.selected = false; + item.GetChild("t1").text = testNames[i]; + item.GetChild("mc").asMovieClip.playing = i % 2 == 0; + item.GetChild("t3").text = "" + UnityEngine.Random.Range(0, 10000); + } + } + + //------------------------------ + private void PlayTransition() + { + GComponent obj = _demoObjects["Transition"]; + obj.GetChild("n2").asCom.GetTransition("t0").Play(int.MaxValue, 0, null); + obj.GetChild("n3").asCom.GetTransition("peng").Play(int.MaxValue, 0, null); + + obj.onAddedToStage.Add(() => + { + obj.GetChild("n2").asCom.GetTransition("t0").Stop(); + obj.GetChild("n3").asCom.GetTransition("peng").Stop(); + }); + } + + //------------------------------ + private Window _winA; + private Window _winB; + private void PlayWindow() + { + GComponent obj = _demoObjects["Window"]; + obj.GetChild("n0").onClick.Add(() => + { + if (_winA == null) + _winA = new Window1(); + _winA.Show(); + }); + + obj.GetChild("n1").onClick.Add(() => + { + if (_winB == null) + _winB = new Window2(); + _winB.Show(); + }); + } + + //------------------------------ + private PopupMenu _pm; + private GComponent _popupCom; + private void PlayPopup() + { + if (_pm == null) + { + _pm = new PopupMenu(); + _pm.AddItem("Item 1", __clickMenu); + _pm.AddItem("Item 2", __clickMenu); + _pm.AddItem("Item 3", __clickMenu); + _pm.AddItem("Item 4", __clickMenu); + } + + if (_popupCom == null) + { + _popupCom = UIPackage.CreateObject("Basics", "Component12").asCom; + _popupCom.Center(); + } + GComponent obj = _demoObjects["Popup"]; + obj.GetChild("n0").onClick.Add((EventContext context) => + { + _pm.Show((GObject)context.sender, PopupDirection.Down); + }); + + obj.GetChild("n1").onClick.Add(() => + { + GRoot.inst.ShowPopup(_popupCom); + }); + + + obj.onRightClick.Add(() => + { + _pm.Show(); + }); + } + + private void __clickMenu(EventContext context) + { + GObject itemObject = (GObject)context.data; + UnityEngine.Debug.Log("click " + itemObject.text); + } + + //------------------------------ + Vector2 startPos; + private void PlayDepth() + { + GComponent obj = _demoObjects["Depth"]; + GComponent testContainer = obj.GetChild("n22").asCom; + GObject fixedObj = testContainer.GetChild("n0"); + fixedObj.sortingOrder = 100; + fixedObj.draggable = true; + + int numChildren = testContainer.numChildren; + int i = 0; + while (i < numChildren) + { + GObject child = testContainer.GetChildAt(i); + if (child != fixedObj) + { + testContainer.RemoveChildAt(i); + numChildren--; + } + else + i++; + } + startPos = new Vector2(fixedObj.x, fixedObj.y); + + obj.GetChild("btn0").onClick.Add(() => + { + GGraph graph = new GGraph(); + startPos.x += 10; + startPos.y += 10; + graph.xy = startPos; + graph.DrawRect(150, 150, 1, Color.black, Color.red); + obj.GetChild("n22").asCom.AddChild(graph); + }); + + obj.GetChild("btn1").onClick.Add(() => + { + GGraph graph = new GGraph(); + startPos.x += 10; + startPos.y += 10; + graph.xy = startPos; + graph.DrawRect(150, 150, 1, Color.black, Color.green); + graph.sortingOrder = 200; + obj.GetChild("n22").asCom.AddChild(graph); + }); + } + + //------------------------------ + private void PlayDragDrop() + { + GComponent obj = _demoObjects["Drag&Drop"]; + obj.GetChild("a").draggable = true; + + GButton b = obj.GetChild("b").asButton; + b.draggable = true; + b.onDragStart.Add((EventContext context) => + { + //Cancel the original dragging, and start a new one with a agent. + context.PreventDefault(); + + DragDropManager.inst.StartDrag(b, b.icon, b.icon, (int)context.data); + }); + + GButton c = obj.GetChild("c").asButton; + c.icon = null; + c.onDrop.Add((EventContext context) => + { + c.icon = (string)context.data; + }); + + GObject bounds = obj.GetChild("n7"); + Rect rect = bounds.TransformRect(new Rect(0, 0, bounds.width, bounds.height), GRoot.inst); + + //---!!Because at this time the container is on the right side of the stage and beginning to move to left(transition), so we need to caculate the final position + rect.x -= obj.parent.x; + //---- + + GButton d = obj.GetChild("d").asButton; + d.draggable = true; + d.dragBounds = rect; + } + + //------------------------------ + private void PlayProgressBar() + { + GComponent obj = _demoObjects["ProgressBar"]; + Timers.inst.Add(0.001f, 0, __playProgress); + obj.onRemovedFromStage.Add(() => { Timers.inst.Remove(__playProgress); }); + } + + void __playProgress(object param) + { + GComponent obj = _demoObjects["ProgressBar"]; + int cnt = obj.numChildren; + for (int i = 0; i < cnt; i++) + { + GProgressBar child = obj.GetChildAt(i) as GProgressBar; + if (child != null) + { + + child.value += 1; + if (child.value > child.max) + child.value = 0; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs.meta new file mode 100644 index 0000000..72dbdfb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Basics/BasicsMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a7c649dfadf79df4a963190eded74b30 +timeCreated: 1446194671 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs b/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs new file mode 100644 index 0000000..318878f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using FairyGUI; + +public class Window1 : Window +{ + public Window1() + { + } + + protected override void OnInit() + { + this.contentPane = UIPackage.CreateObject("Basics", "WindowA").asCom; + this.Center(); + } + + override protected void OnShown() + { + GList list = this.contentPane.GetChild("n6").asList; + list.RemoveChildrenToPool(); + + for (int i = 0; i < 6; i++) + { + GButton item = list.AddItemFromPool().asButton; + item.title = "" + i; + item.icon = UIPackage.GetItemURL("Basics", "r4"); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs.meta b/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs.meta new file mode 100644 index 0000000..d8c168c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Basics/Window1.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f9e33dc08a51fd04883526e4f5129e42 +timeCreated: 1447054717 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs b/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs new file mode 100644 index 0000000..df1a5ef --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using FairyGUI; +using UnityEngine; + +public class Window2 : Window +{ + public Window2() + { + } + + protected override void OnInit() + { + this.contentPane = UIPackage.CreateObject("Basics", "WindowB").asCom; + this.Center(); + } + + override protected void DoShowAnimation() + { + this.SetScale(0.1f, 0.1f); + this.SetPivot(0.5f, 0.5f); + this.TweenScale(new Vector2(1, 1), 0.3f).OnComplete(this.OnShown); + } + + override protected void DoHideAnimation() + { + this.TweenScale(new Vector2(0.1f, 0.1f), 0.3f).OnComplete(this.HideImmediately); + } + + override protected void OnShown() + { + contentPane.GetTransition("t1").Play(); + } + + override protected void OnHide() + { + contentPane.GetTransition("t1").Stop(); + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs.meta b/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs.meta new file mode 100644 index 0000000..70f78ff --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Basics/Window2.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f922289dfda2b1d4689eabfcdf6a5b91 +timeCreated: 1447054712 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/BundleUsage.meta b/Assets/Plugins/FairyGUI/Examples/BundleUsage.meta new file mode 100644 index 0000000..c7499fb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/BundleUsage.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ae0ad495a670df246b212607e661ec96 +folderAsset: yes +timeCreated: 1446643487 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs b/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs new file mode 100644 index 0000000..a6bd420 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs @@ -0,0 +1,86 @@ +using System.Collections; +using UnityEngine; +using FairyGUI; +using System.Net; +using UnityEngine.Networking; +using System; + +/// +/// Demonstrated how to load UI package from assetbundle. The bundle can be build from the Window Menu->Build FairyGUI example bundles. +/// +class BundleUsageMain : MonoBehaviour +{ + GComponent _mainView; + + void Start() + { + Application.targetFrameRate = 60; + + Stage.inst.onKeyDown.Add(OnKeyDown); + + StartCoroutine(LoadUIPackage()); + } + + IEnumerator LoadUIPackage() + { + string url = Application.streamingAssetsPath.Replace("\\", "/") + "/fairygui-examples/bundleusage.ab"; + if (Application.isEditor) + { + UriBuilder uri = new UriBuilder(url); + uri.Scheme = "file"; + url = uri.ToString(); + } + +#if UNITY_2017_2_OR_NEWER + +#if UNITY_2018_1_OR_NEWER + UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(url); +#else + UnityWebRequest www = UnityWebRequest.GetAssetBundle(url); +#endif + yield return www.SendWebRequest(); + +#if UNITY_2020_2_OR_NEWER + if (www.result == UnityWebRequest.Result.Success) +#else + if (!www.isNetworkError && !www.isHttpError) +#endif + { + AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(www); +#else + WWW www = new WWW(url); + yield return www; + + if (string.IsNullOrEmpty(www.error)) + { + AssetBundle bundle = www.assetBundle; +#endif + if (bundle == null) + { + Debug.LogWarning("Run Window->Build FairyGUI example Bundles first."); + yield return 0; + } + UIPackage.AddPackage(bundle); + + _mainView = UIPackage.CreateObject("BundleUsage", "Main").asCom; + _mainView.fairyBatching = true; + _mainView.MakeFullScreen(); + _mainView.AddRelation(GRoot.inst, RelationType.Size); + + GRoot.inst.AddChild(_mainView); + _mainView.GetTransition("t0").Play(); + } + else + { + Debug.LogWarning("Run Window->Build FairyGUI example Bundles first."); + } + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs.meta new file mode 100644 index 0000000..6eba8f8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/BundleUsage/BundleUsageMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c34dde491ef252c49af798031b5a37de +timeCreated: 1446643490 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Cooldown.meta b/Assets/Plugins/FairyGUI/Examples/Cooldown.meta new file mode 100644 index 0000000..ae29f7a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Cooldown.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ee28fce39e275054fad5911e3f98c5e2 +folderAsset: yes +timeCreated: 1447173764 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs b/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs new file mode 100644 index 0000000..b540b93 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using FairyGUI; +public class CooldownMain : MonoBehaviour +{ + GComponent _mainView; + + GButton _btn0; + GImage _mask0; + float _time1; + + GButton _btn1; + GImage _mask1; + float _time2; + + void Start() + { + Application.targetFrameRate = 60; + + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.gameObject.GetComponent().ui; + + _btn0 = _mainView.GetChild("b0").asButton; + _btn0.icon = "Cooldown/k0"; + _time1 = 5; + _mask0 = _btn0.GetChild("mask").asImage; + + _btn1 = _mainView.GetChild("b1").asButton; + _btn1.icon = "Cooldown/k1"; + _time2 = 10; + _mask1 = _btn1.GetChild("mask").asImage; + + } + + void Update() + { + _time1 -= Time.deltaTime; + if (_time1 < 0) + _time1 = 5; + _mask0.fillAmount = 1 - (5 - _time1) / 5f; + + _time2 -= Time.deltaTime; + if (_time2 < 0) + _time2 = 10; + _btn1.text = string.Empty + Mathf.RoundToInt(_time2); + _mask1.fillAmount = 1 - (10 - _time2) / 10f; + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } + +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs.meta new file mode 100644 index 0000000..a26b879 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Cooldown/CooldownMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c59a131f345dd4e4895409b111e0c434 +timeCreated: 1447174165 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Curve.meta b/Assets/Plugins/FairyGUI/Examples/Curve.meta new file mode 100644 index 0000000..6c26a32 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Curve.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9255b3554fc92214b98dc85f52b3ebb2 +folderAsset: yes +timeCreated: 1461431337 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs b/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs new file mode 100644 index 0000000..0b5803b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using FairyGUI; + +public class CurveMain : MonoBehaviour +{ + GComponent _mainView; + GList _list; + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + _list = _mainView.GetChild("list").asList; + _list.SetVirtualAndLoop(); + _list.itemRenderer = RenderListItem; + _list.numItems = 5; + _list.scrollPane.onScroll.Add(DoSpecialEffect); + + DoSpecialEffect(); + } + + void DoSpecialEffect() + { + //change the scale according to the distance to middle + float midX = _list.scrollPane.posX + _list.viewWidth / 2; + int cnt = _list.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject obj = _list.GetChildAt(i); + float dist = Mathf.Abs(midX - obj.x - obj.width / 2); + if (dist > obj.width) //no intersection + obj.SetScale(1, 1); + else + { + float ss = 1 + (1 - dist / obj.width) * 0.24f; + obj.SetScale(ss, ss); + } + } + } + + void RenderListItem(int index, GObject obj) + { + GButton item = (GButton)obj; + item.SetPivot(0.5f, 0.5f); + item.icon = UIPackage.GetItemURL("Curve", "n" + (index + 1)); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs.meta new file mode 100644 index 0000000..aed15a3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Curve/CurveMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d30b14c0ce756e2428ef9db93b692b69 +timeCreated: 1461431341 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene.meta b/Assets/Plugins/FairyGUI/Examples/CutScene.meta new file mode 100644 index 0000000..083adc2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/CutScene.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0b781546cb2bc024a9f388f515ff11e4 +folderAsset: yes +timeCreated: 1446628629 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs b/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs new file mode 100644 index 0000000..a1cfafd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs @@ -0,0 +1,28 @@ +using System.Collections; +using UnityEngine; +using FairyGUI; + +/// +/// Demonstrated the simple flow of a game. +/// +public class CutSceneMain : MonoBehaviour +{ + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + UIPackage.AddPackage("UI/CutScene"); + + LevelManager.inst.Init(); + LevelManager.inst.LoadLevel("scene1"); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs.meta new file mode 100644 index 0000000..0c9d223 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/CutScene/CutSceneMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f0c05fcb4b735cf4587717a360b2a231 +timeCreated: 1446628633 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs b/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs new file mode 100644 index 0000000..a08c2a1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs @@ -0,0 +1,82 @@ +using System.Collections; +using UnityEngine; +#if UNITY_5_3_OR_NEWER +using UnityEngine.SceneManagement; +#endif +using FairyGUI; + +public class LevelManager : MonoBehaviour +{ + static LevelManager _instance; + public static LevelManager inst + { + get + { + if (_instance == null) + { + GameObject go = new GameObject("LevelManager"); + DontDestroyOnLoad(go); + _instance = go.AddComponent(); + } + return _instance; + } + } + + GComponent _cutSceneView; + GComponent _mainView; + + public LevelManager() + { + } + + public void Init() + { + _cutSceneView = UIPackage.CreateObject("CutScene", "CutScene").asCom; + _cutSceneView.SetSize(GRoot.inst.width, GRoot.inst.height); + _cutSceneView.AddRelation(GRoot.inst, RelationType.Size); + + _mainView = UIPackage.CreateObject("CutScene", "Main").asCom; + _mainView.SetSize(GRoot.inst.width, GRoot.inst.height); + _mainView.AddRelation(GRoot.inst, RelationType.Size); + + _mainView.GetChild("n0").onClick.Add(() => + { + LoadLevel("scene1"); + }); + + _mainView.GetChild("n1").onClick.Add(() => + { + LoadLevel("scene2"); + }); + } + + public void LoadLevel(string levelName) + { + StartCoroutine(DoLoad(levelName)); + GRoot.inst.AddChild(_cutSceneView); + } + + IEnumerator DoLoad(string sceneName) + { + GRoot.inst.AddChild(_cutSceneView); + GProgressBar pb = _cutSceneView.GetChild("pb").asProgress; + pb.value = 0; +#if UNITY_5_3_OR_NEWER + AsyncOperation op = SceneManager.LoadSceneAsync(sceneName); +#else + AsyncOperation op = Application.LoadLevelAsync(sceneName); +#endif + float startTime = Time.time; + while (!op.isDone || pb.value != 100) + { + int value = (int)((Time.time - startTime) * 100f / 3f); + if (value > 100) + value = 100; + pb.value = value; + yield return null; + } + + GRoot.inst.RemoveChild(_cutSceneView); + GRoot.inst.AddChild(_mainView); + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs.meta b/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs.meta new file mode 100644 index 0000000..15e4d49 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/CutScene/LevelManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cfefd808bb86e4f4cb34eaf9da5d1a36 +timeCreated: 1446630965 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Editor.meta b/Assets/Plugins/FairyGUI/Examples/Editor.meta new file mode 100644 index 0000000..543b0eb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b79c211a7d63ecf4796b13556fd29826 +folderAsset: yes +timeCreated: 1446620759 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs b/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs new file mode 100644 index 0000000..5dab672 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using UnityEditor; +using System.IO; + +public class BuildAssetBundles +{ + [MenuItem("Window/Build FairyGUI Example Bundles")] + public static void Build() + { + string testPath = "UI/BundleUsage_fui"; + Object obj = Resources.Load(testPath); + string path = AssetDatabase.GetAssetPath(obj); + if(string.IsNullOrEmpty(path)) + { + Debug.LogWarning("sample not found: " + testPath); + return; + } + string basePath = path.Substring(0, path.Length - testPath.Length - 6); + + for (int i = 0; i < 10; i++) + { + AssetImporter.GetAtPath(basePath + "Icons/i" + i + ".png").assetBundleName = "fairygui-examples/i" + i + ".ab"; + } + + AssetImporter.GetAtPath(basePath + "UI/BundleUsage_fui.bytes").assetBundleName = "fairygui-examples/bundleusage.ab"; + AssetImporter.GetAtPath(basePath + "UI/BundleUsage_atlas0.png").assetBundleName = "fairygui-examples/bundleusage.ab"; + + if (!Directory.Exists(Application.streamingAssetsPath)) + Directory.CreateDirectory(Application.streamingAssetsPath); + + BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath, BuildAssetBundleOptions.None, EditorUserBuildSettings.activeBuildTarget); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs.meta b/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs.meta new file mode 100644 index 0000000..8545c92 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Editor/BuildAssetBundles.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bb6ce699bc9e31440b4f01462aacc612 +timeCreated: 1446625466 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers.meta b/Assets/Plugins/FairyGUI/Examples/EmitNumbers.meta new file mode 100644 index 0000000..bae1563 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/EmitNumbers.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 91fdebf77175d934ab3d4689ca57f396 +folderAsset: yes +timeCreated: 1446569240 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs new file mode 100644 index 0000000..2910a78 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs @@ -0,0 +1,94 @@ +using UnityEngine; +using FairyGUI; + +public class EmitComponent : GComponent +{ + GLoader _symbolLoader; + GTextField _numberText; + Transform _owner; + + const float OFFSET_ADDITION = 2.2f; + static Vector2 JITTER_FACTOR = new Vector2(80, 80); + + public EmitComponent() + { + this.touchable = false; + + _symbolLoader = new GLoader(); + _symbolLoader.autoSize = true; + AddChild(_symbolLoader); + + _numberText = new GTextField(); + _numberText.autoSize = AutoSizeType.Both; + + AddChild(_numberText); + } + + public void SetHurt(Transform owner, int type, long hurt, bool critical) + { + _owner = owner; + + TextFormat tf = _numberText.textFormat; + if (type == 0) + tf.font = EmitManager.inst.hurtFont1; + else + tf.font = EmitManager.inst.hurtFont2; + _numberText.textFormat = tf; + _numberText.text = "-" + hurt; + + if (critical) + _symbolLoader.url = EmitManager.inst.criticalSign; + else + _symbolLoader.url = ""; + + UpdateLayout(); + + this.alpha = 1; + UpdatePosition(Vector2.zero); + Vector2 rnd = Vector2.Scale(UnityEngine.Random.insideUnitCircle, JITTER_FACTOR); + int toX = (int)rnd.x * 2; + int toY = (int)rnd.y * 2; + + EmitManager.inst.view.AddChild(this); + GTween.To(Vector2.zero, new Vector2(toX, toY), 1f).SetTarget(this) + .OnUpdate((GTweener tweener) => { this.UpdatePosition(tweener.value.vec2); }).OnComplete(this.OnCompleted); + this.TweenFade(0, 0.5f).SetDelay(0.5f); + } + + void UpdateLayout() + { + this.SetSize(_symbolLoader.width + _numberText.width, Mathf.Max(_symbolLoader.height, _numberText.height)); + _numberText.SetXY(_symbolLoader.width > 0 ? (_symbolLoader.width + 2) : 0, + (this.height - _numberText.height) / 2); + _symbolLoader.y = (this.height - _symbolLoader.height) / 2; + } + + void UpdatePosition(Vector2 pos) + { + Vector3 ownerPos = _owner.position; + ownerPos.y += OFFSET_ADDITION; + Vector3 screenPos = Camera.main.WorldToScreenPoint(ownerPos); + screenPos.y = Screen.height - screenPos.y; //convert to Stage coordinates system + + Vector3 pt = GRoot.inst.GlobalToLocal(screenPos); + this.SetXY(Mathf.RoundToInt(pt.x + pos.x - this.actualWidth / 2), Mathf.RoundToInt(pt.y + pos.y - this.height)); + } + + void OnCompleted() + { + _owner = null; + EmitManager.inst.view.RemoveChild(this); + EmitManager.inst.ReturnComponent(this); + } + + public void Cancel() + { + _owner = null; + if (this.parent != null) + { + GTween.Kill(this); + EmitManager.inst.view.RemoveChild(this); + } + EmitManager.inst.ReturnComponent(this); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs.meta b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs.meta new file mode 100644 index 0000000..8b7e97f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitComponent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d8535a403e7324c49890b1de70edc2a0 +timeCreated: 1446570746 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs new file mode 100644 index 0000000..ef12b53 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using UnityEngine; +using FairyGUI; + +public class EmitManager +{ + static EmitManager _instance; + public static EmitManager inst + { + get + { + if (_instance == null) + _instance = new EmitManager(); + return _instance; + } + } + + public string hurtFont1; + public string hurtFont2; + public string criticalSign; + + public GComponent view { get; private set; } + + private readonly Stack _componentPool = new Stack(); + + public EmitManager() + { + hurtFont1 = "ui://EmitNumbers/number1"; + hurtFont2 = "ui://EmitNumbers/number2"; + criticalSign = "ui://EmitNumbers/critical"; + + view = new GComponent(); + GRoot.inst.AddChild(view); + } + + public void Emit(Transform owner, int type, long hurt, bool critical) + { + EmitComponent ec; + if (_componentPool.Count > 0) + ec = _componentPool.Pop(); + else + ec = new EmitComponent(); + ec.SetHurt(owner, type, hurt, critical); + } + + public void ReturnComponent(EmitComponent com) + { + _componentPool.Push(com); + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs.meta b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs.meta new file mode 100644 index 0000000..53bd627 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 335d4e8607937704285d9e0aec495020 +timeCreated: 1446570745 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs new file mode 100644 index 0000000..f1cdcdf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs @@ -0,0 +1,44 @@ +using System.Collections; +using UnityEngine; +using FairyGUI; + +public class EmitNumbersMain : MonoBehaviour +{ + Transform _npc1; + Transform _npc2; + bool _finished; + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _npc1 = GameObject.Find("npc1").transform; + _npc2 = GameObject.Find("npc2").transform; + + StartCoroutine(RunTest()); + } + + void OnDisable() + { + _finished = true; + } + + IEnumerator RunTest() + { + while (!_finished) + { + EmitManager.inst.Emit(_npc1, 0, UnityEngine.Random.Range(100, 100000), UnityEngine.Random.Range(0, 10) == 5); + EmitManager.inst.Emit(_npc2, 1, UnityEngine.Random.Range(100, 100000), UnityEngine.Random.Range(0, 10) == 5); + yield return new WaitForSeconds(0.3f); + } + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs.meta new file mode 100644 index 0000000..e286ee3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/EmitNumbers/EmitNumbersMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3ee84d8c960d2404893a09cb4009bee8 +timeCreated: 1446569244 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji.meta b/Assets/Plugins/FairyGUI/Examples/Emoji.meta new file mode 100644 index 0000000..b7f5509 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Emoji.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fbba022553e7d1d438d20305716af90e +folderAsset: yes +timeCreated: 1446193142 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs new file mode 100644 index 0000000..9489713 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs @@ -0,0 +1,196 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using FairyGUI; + +public class EmojiMain : MonoBehaviour +{ + GComponent _mainView; + GList _list; + GTextInput _input1; + GTextInput _input2; + GComponent _emojiSelectUI1; + GComponent _emojiSelectUI2; + + class Message + { + public string sender; + public string senderIcon; + public string msg; + public bool fromMe; + } + List _messages; + + Dictionary _emojies; + + void Awake() + { + UIPackage.AddPackage("UI/Emoji"); + + UIConfig.verticalScrollBar = "ui://Emoji/ScrollBar_VT"; + UIConfig.defaultScrollBarDisplay = ScrollBarDisplayType.Auto; + } + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _messages = new List(); + + _mainView = this.GetComponent().ui; + + _list = _mainView.GetChild("list").asList; + _list.SetVirtual(); + _list.itemProvider = GetListItemResource; + _list.itemRenderer = RenderListItem; + + _input1 = _mainView.GetChild("input1").asTextInput; + _input1.onKeyDown.Add(__inputKeyDown1); + + _input2 = _mainView.GetChild("input2").asTextInput; + _input2.onKeyDown.Add(__inputKeyDown2); + + //作为demo,这里只添加了部分表情素材 + _emojies = new Dictionary(); + for (uint i = 0x1f600; i < 0x1f637; i++) + { + string url = UIPackage.GetItemURL("Emoji", Convert.ToString(i, 16)); + if (url != null) + _emojies.Add(i, new Emoji(url)); + } + _input2.emojies = _emojies; + + _mainView.GetChild("btnSend1").onClick.Add(__clickSendBtn1); + _mainView.GetChild("btnSend2").onClick.Add(__clickSendBtn2); + + _mainView.GetChild("btnEmoji1").onClick.Add(__clickEmojiBtn1); + _mainView.GetChild("btnEmoji2").onClick.Add(__clickEmojiBtn2); + + _emojiSelectUI1 = UIPackage.CreateObject("Emoji", "EmojiSelectUI").asCom; + _emojiSelectUI1.fairyBatching = true; + _emojiSelectUI1.GetChild("list").asList.onClickItem.Add(__clickEmoji1); + + _emojiSelectUI2 = UIPackage.CreateObject("Emoji", "EmojiSelectUI_ios").asCom; + _emojiSelectUI2.fairyBatching = true; + _emojiSelectUI2.GetChild("list").asList.onClickItem.Add(__clickEmoji2); + } + + void AddMsg(string sender, string senderIcon, string msg, bool fromMe) + { + bool isScrollBottom = _list.scrollPane.isBottomMost; + + Message newMessage = new Message(); + newMessage.sender = sender; + newMessage.senderIcon = senderIcon; + newMessage.msg = msg; + newMessage.fromMe = fromMe; + _messages.Add(newMessage); + + if (newMessage.fromMe) + { + if (_messages.Count == 1 || UnityEngine.Random.Range(0f, 1f) < 0.5f) + { + Message replyMessage = new Message(); + replyMessage.sender = "FairyGUI"; + replyMessage.senderIcon = "r1"; + replyMessage.msg = "Today is a good day. \U0001f600"; + replyMessage.fromMe = false; + _messages.Add(replyMessage); + } + } + + if (_messages.Count > 100) + _messages.RemoveRange(0, _messages.Count - 100); + + _list.numItems = _messages.Count; + + if (isScrollBottom) + _list.scrollPane.ScrollBottom(); + } + + string GetListItemResource(int index) + { + Message msg = _messages[index]; + if (msg.fromMe) + return "ui://Emoji/chatRight"; + else + return "ui://Emoji/chatLeft"; + } + + void RenderListItem(int index, GObject obj) + { + GButton item = (GButton)obj; + Message msg = _messages[index]; + if (!msg.fromMe) + item.GetChild("name").text = msg.sender; + item.icon = UIPackage.GetItemURL("Emoji", msg.senderIcon); + + //Recaculate the text width + GRichTextField tf = item.GetChild("msg").asRichTextField; + tf.emojies = _emojies; + tf.text = EmojiParser.inst.Parse(msg.msg); + } + + void __clickSendBtn1(EventContext context) + { + string msg = _input1.text; + if (msg.Length == 0) + return; + + AddMsg("Unity", "r0", msg, true); + _input1.text = ""; + } + + void __clickSendBtn2(EventContext context) + { + string msg = _input2.text; + if (msg.Length == 0) + return; + + AddMsg("Unity", "r0", msg, true); + _input2.text = ""; + } + + void __clickEmojiBtn1(EventContext context) + { + GRoot.inst.ShowPopup(_emojiSelectUI1, (GObject)context.sender, PopupDirection.Up); + } + + void __clickEmojiBtn2(EventContext context) + { + GRoot.inst.ShowPopup(_emojiSelectUI2, (GObject)context.sender, PopupDirection.Up); + } + + void __clickEmoji1(EventContext context) + { + GButton item = (GButton)context.data; + _input1.ReplaceSelection("[:" + item.text + "]"); + } + + void __clickEmoji2(EventContext context) + { + GButton item = (GButton)context.data; + _input2.ReplaceSelection(Char.ConvertFromUtf32(Convert.ToInt32(UIPackage.GetItemByURL(item.icon).name, 16))); + } + + void __inputKeyDown1(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Return) + _mainView.GetChild("btnSend1").onClick.Call(); + } + + void __inputKeyDown2(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Return) + _mainView.GetChild("btnSend2").onClick.Call(); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs.meta new file mode 100644 index 0000000..6d3b882 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4953851686ef2ed4d90f67c5fe144849 +timeCreated: 1446193148 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs new file mode 100644 index 0000000..93a4e80 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs @@ -0,0 +1,31 @@ +using FairyGUI; +using FairyGUI.Utils; + +public class EmojiParser : UBBParser +{ + static EmojiParser _instance; + public new static EmojiParser inst + { + get + { + if (_instance == null) + _instance = new EmojiParser(); + return _instance; + } + } + + private static string[] TAGS = new string[] + { "88","am","bs","bz","ch","cool","dhq","dn","fd","gz","han","hx","hxiao","hxiu" }; + public EmojiParser () + { + foreach (string ss in TAGS) + { + this.handlers[":"+ss] = OnTag_Emoji; + } + } + + string OnTag_Emoji(string tagName, bool end, string attr) + { + return ""; + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs.meta b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs.meta new file mode 100644 index 0000000..994d6b4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Emoji/EmojiParser.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ebe7b2fb6b5fe8c488fac00b1b177326 +timeCreated: 1446193148 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Extension.meta b/Assets/Plugins/FairyGUI/Examples/Extension.meta new file mode 100644 index 0000000..5ff8a6a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Extension.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dc519b1dfb870064ea786640d8a0a8d1 +folderAsset: yes +timeCreated: 1446648215 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs b/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs new file mode 100644 index 0000000..231c54b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs @@ -0,0 +1,55 @@ +using UnityEngine; +using FairyGUI; + +public class ExtensionMain : MonoBehaviour +{ + GComponent _mainView; + GList _list; + + void Awake() + { + UIPackage.AddPackage("UI/Extension"); + UIObjectFactory.SetPackageItemExtension("ui://Extension/mailItem", typeof(MailItem)); + + } + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + _list = _mainView.GetChild("mailList").asList; + for (int i = 0; i < 10; i++) + { + MailItem item = (MailItem)_list.AddItemFromPool(); + item.setFetched(i % 3 == 0); + item.setRead(i % 2 == 0); + item.setTime("5 Nov 2015 16:24:33"); + item.title = "Mail title here"; + } + + _list.EnsureBoundsCorrect(); + float delay = 0f; + for (int i = 0; i < 10; i++) + { + MailItem item = (MailItem)_list.GetChildAt(i); + if (_list.IsChildInView(item)) + { + item.PlayEffect(delay); + delay += 0.2f; + } + else + break; + } + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs.meta new file mode 100644 index 0000000..410eea4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Extension/ExtensionMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1b0647927cbff65449b89590caf97481 +timeCreated: 1446648215 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs b/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs new file mode 100644 index 0000000..a67c34c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs @@ -0,0 +1,41 @@ +using UnityEngine; +using FairyGUI; + +public class MailItem : GButton +{ + GTextField _timeText; + Controller _readController; + Controller _fetchController; + Transition _trans; + + public override void ConstructFromXML(FairyGUI.Utils.XML cxml) + { + base.ConstructFromXML(cxml); + + _timeText = this.GetChild("timeText").asTextField; + _readController = this.GetController("IsRead"); + _fetchController = this.GetController("c1"); + _trans = this.GetTransition("t0"); + } + + public void setTime(string value) + { + _timeText.text = value; + } + + public void setRead(bool value) + { + _readController.selectedIndex = value ? 1 : 0; + } + + public void setFetched(bool value) + { + _fetchController.selectedIndex = value ? 1 : 0; + } + + public void PlayEffect(float delay) + { + this.visible = false; + _trans.Play(1, delay, null); + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs.meta b/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs.meta new file mode 100644 index 0000000..15df212 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Extension/MailItem.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 26140e87934f8754689c7bf2ac147fbe +timeCreated: 1446648219 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Filter.meta b/Assets/Plugins/FairyGUI/Examples/Filter.meta new file mode 100644 index 0000000..1436889 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Filter.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 029ae1bcb2ae7f2448723a7be724a31d +folderAsset: yes +timeCreated: 1465913233 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs b/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs new file mode 100644 index 0000000..16f101a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs @@ -0,0 +1,78 @@ +using UnityEngine; +using FairyGUI; + +public class FilterMain : MonoBehaviour +{ + GComponent _mainView; + GSlider _s0; + GSlider _s1; + GSlider _s2; + GSlider _s3; + GSlider _s4; + + void Awake() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + UIPackage.AddPackage("UI/Filter"); + } + + void Start() + { + _mainView = this.GetComponent().ui; + + BlurFilter blurFilter = new BlurFilter(); + blurFilter.blurSize = 2; + _mainView.GetChild("n21").filter = blurFilter; + + _s0 = _mainView.GetChild("s0").asSlider; + _s1 = _mainView.GetChild("s1").asSlider; + _s2 = _mainView.GetChild("s2").asSlider; + _s3 = _mainView.GetChild("s3").asSlider; + _s4 = _mainView.GetChild("s4").asSlider; + + _s0.value = 100; + _s1.value = 100; + _s2.value = 100; + _s3.value = 200; + _s4.value = 20; + + _s0.onChanged.Add(__sliderChanged); + _s1.onChanged.Add(__sliderChanged); + _s2.onChanged.Add(__sliderChanged); + _s3.onChanged.Add(__sliderChanged); + _s4.onChanged.Add(__sliderChanged); + } + + void __sliderChanged(EventContext context) + { + int cnt = _mainView.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject obj = _mainView.GetChildAt(i); + if (obj.filter is ColorFilter) + { + ColorFilter filter = (ColorFilter)obj.filter; + filter.Reset(); + filter.AdjustBrightness((float)(_s0.value - 100) / 100f); + filter.AdjustContrast((float)(_s1.value - 100) / 100f); + filter.AdjustSaturation((float)(_s2.value - 100) / 100f); + filter.AdjustHue((float)(_s3.value - 100) / 100f); + } + else if (obj.filter is BlurFilter) + { + BlurFilter filter = (BlurFilter)obj.filter; + filter.blurSize = (float)_s4.value / 100; + } + } + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs.meta new file mode 100644 index 0000000..798bacf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Filter/FilterMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 78878c40447242843aa913ef50cce606 +timeCreated: 1465402161 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Gesture.meta b/Assets/Plugins/FairyGUI/Examples/Gesture.meta new file mode 100644 index 0000000..319ed25 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Gesture.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c2c523738da07e8498b13cb58f69289e +folderAsset: yes +timeCreated: 1464248161 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs b/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs new file mode 100644 index 0000000..85015b7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs @@ -0,0 +1,115 @@ +using UnityEngine; +using FairyGUI; + +public class GestureMain : MonoBehaviour +{ + GComponent _mainView; + Transform _ball; + + void Awake() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + UIPackage.AddPackage("UI/Gesture"); + } + + void Start() + { + _mainView = this.GetComponent().ui; + GObject holder = _mainView.GetChild("holder"); + + _ball = GameObject.Find("Globe").transform; + + SwipeGesture gesture1 = new SwipeGesture(holder); + gesture1.onMove.Add(OnSwipeMove); + gesture1.onEnd.Add(OnSwipeEnd); + + LongPressGesture gesture2 = new LongPressGesture(holder); + gesture2.once = false; + gesture2.onAction.Add(OnHold); + + PinchGesture gesture3 = new PinchGesture(holder); + gesture3.onAction.Add(OnPinch); + + RotationGesture gesture4 = new RotationGesture(holder); + gesture4.onAction.Add(OnRotate); + } + + void OnSwipeMove(EventContext context) + { + SwipeGesture gesture = (SwipeGesture)context.sender; + Vector3 v = new Vector3(); + if (Mathf.Abs(gesture.delta.x) > Mathf.Abs(gesture.delta.y)) + { + v.y = -Mathf.Round(gesture.delta.x); + if (Mathf.Abs(v.y) < 2) //消除手抖的影响 + return; + } + else + { + v.x = -Mathf.Round(gesture.delta.y); + if (Mathf.Abs(v.x) < 2) + return; + } + _ball.Rotate(v, Space.World); + } + + void OnSwipeEnd(EventContext context) + { + SwipeGesture gesture = (SwipeGesture)context.sender; + Vector3 v = new Vector3(); + if (Mathf.Abs(gesture.velocity.x) > Mathf.Abs(gesture.velocity.y)) + { + v.y = -Mathf.Round(Mathf.Sign(gesture.velocity.x) * Mathf.Sqrt(Mathf.Abs(gesture.velocity.x))); + if (Mathf.Abs(v.y) < 2) + return; + } + else + { + v.x = -Mathf.Round(Mathf.Sign(gesture.velocity.y) * Mathf.Sqrt(Mathf.Abs(gesture.velocity.y))); + if (Mathf.Abs(v.x) < 2) + return; + } + + GTween.To(v, Vector3.zero, 0.3f).SetTarget(_ball).OnUpdate( + (GTweener tweener) => + { + _ball.Rotate(tweener.deltaValue.vec3, Space.World); + }); + } + + void OnHold(EventContext context) + { + GTween.Shake(_ball.transform.localPosition, 0.05f, 0.5f).SetTarget(_ball).OnUpdate( + (GTweener tweener) => + { + _ball.transform.localPosition = new Vector3(tweener.value.x, tweener.value.y, _ball.transform.localPosition.z); + }); + } + + void OnPinch(EventContext context) + { + GTween.Kill(_ball); + + PinchGesture gesture = (PinchGesture)context.sender; + float newValue = Mathf.Clamp(_ball.localScale.x + gesture.delta, 0.3f, 2); + _ball.localScale = new Vector3(newValue, newValue, newValue); + } + + void OnRotate(EventContext context) + { + GTween.Kill(_ball); + + RotationGesture gesture = (RotationGesture)context.sender; + _ball.Rotate(Vector3.forward, -gesture.delta, Space.World); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs.meta new file mode 100644 index 0000000..a9cf54f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Gesture/GestureMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dffc58029aa66074287bfe11db08a102 +timeCreated: 1464248165 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Guide.meta b/Assets/Plugins/FairyGUI/Examples/Guide.meta new file mode 100644 index 0000000..56649df --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Guide.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bf04af674d0fada4d93df62ec9e22a95 +folderAsset: yes +timeCreated: 1456392097 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs b/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs new file mode 100644 index 0000000..896236f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using FairyGUI; + +public class GuideMain : MonoBehaviour +{ + GComponent _mainView; + GComponent _guideLayer; + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + _guideLayer = UIPackage.CreateObject("Guide", "GuideLayer").asCom; + _guideLayer.SetSize(GRoot.inst.width, GRoot.inst.height); + _guideLayer.AddRelation(GRoot.inst, RelationType.Size); + + GObject bagBtn = _mainView.GetChild("bagBtn"); + bagBtn.onClick.Add(() => + { + _guideLayer.RemoveFromParent(); + }); + + _mainView.GetChild("n2").onClick.Add(() => + { + GRoot.inst.AddChild(_guideLayer); //!!Before using TransformRect(or GlobalToLocal), the object must be added first + Rect rect = bagBtn.TransformRect(new Rect(0, 0, bagBtn.width, bagBtn.height), _guideLayer); + + GObject window = _guideLayer.GetChild("window"); + window.size = new Vector2((int)rect.size.x, (int)rect.size.y); + window.TweenMove(new Vector2((int)rect.position.x, (int)rect.position.y), 0.5f); + }); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs.meta new file mode 100644 index 0000000..e2369c8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Guide/GuideMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 917e86e515017db488b38e836ed52634 +timeCreated: 1456392101 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/HeadBar.meta b/Assets/Plugins/FairyGUI/Examples/HeadBar.meta new file mode 100644 index 0000000..ec48900 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/HeadBar.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8294eab8d3a942c43aed8054200d3119 +folderAsset: yes +timeCreated: 1446540831 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs b/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs new file mode 100644 index 0000000..47b1fc4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs @@ -0,0 +1,34 @@ +using UnityEngine; +using FairyGUI; + +public class HeadBarMain : MonoBehaviour +{ + GComponent _mainView; + + void Start() + { + Application.targetFrameRate = 60; + + Stage.inst.onKeyDown.Add(OnKeyDown); + + Transform npc = GameObject.Find("npc1").transform; + UIPanel panel = npc.Find("HeadBar").GetComponent(); + panel.ui.GetChild("name").text = "Long [color=#FFFFFF]Long[/color][img]ui://HeadBar/cool[/img] Name"; + panel.ui.GetChild("blood").asProgress.value = 75; + panel.ui.GetChild("sign").asLoader.url = "ui://HeadBar/task"; + + npc = GameObject.Find("npc2").transform; + panel = npc.Find("HeadBar").GetComponent(); + panel.ui.GetChild("name").text = "Man2"; + panel.ui.GetChild("blood").asProgress.value = 25; + panel.ui.GetChild("sign").asLoader.url = "ui://HeadBar/fighting"; + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs.meta new file mode 100644 index 0000000..5e271bf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/HeadBar/HeadBarMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3f24b49a96743734c8d2ef9ba2c9b32d +timeCreated: 1446540834 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/HitTest.meta b/Assets/Plugins/FairyGUI/Examples/HitTest.meta new file mode 100644 index 0000000..4a3463d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/HitTest.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 108d5a390778d664cb644fadf56d6faf +folderAsset: yes +timeCreated: 1456474673 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs b/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs new file mode 100644 index 0000000..c72eb11 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using FairyGUI; + +public class HitTestMain : MonoBehaviour +{ + Transform cube; + + void Start() + { + Application.targetFrameRate = 60; + + cube = GameObject.Find("Cube").transform; + + Stage.inst.onTouchBegin.Add(OnTouchBegin); + } + + void OnTouchBegin() + { + if (!Stage.isTouchOnUI) + { + RaycastHit hit; + Ray ray = Camera.main.ScreenPointToRay(new Vector2(Stage.inst.touchPosition.x, Screen.height - Stage.inst.touchPosition.y)); + if (Physics.Raycast(ray, out hit)) + { + if (hit.transform == cube) + { + Debug.Log("Hit the cube"); + } + } + } + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs.meta new file mode 100644 index 0000000..5b8d374 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/HitTest/HitTestMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 12542fe68a883624ea477c953ae0cf52 +timeCreated: 1456474677 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick.meta b/Assets/Plugins/FairyGUI/Examples/Joystick.meta new file mode 100644 index 0000000..0814ea1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Joystick.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c90dbc7e654112a4dbaa796e7e3cc987 +folderAsset: yes +timeCreated: 1446193142 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs new file mode 100644 index 0000000..6e60f2b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs @@ -0,0 +1,42 @@ +using UnityEngine; +using FairyGUI; + +public class JoystickMain : MonoBehaviour +{ + GComponent _mainView; + GTextField _text; + JoystickModule _joystick; + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + _text = _mainView.GetChild("n9").asTextField; + + _joystick = new JoystickModule(_mainView); + _joystick.onMove.Add(__joystickMove); + _joystick.onEnd.Add(__joystickEnd); + } + + void __joystickMove(EventContext context) + { + float degree = (float)context.data; + _text.text = "" + degree; + } + + void __joystickEnd() + { + _text.text = ""; + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs.meta new file mode 100644 index 0000000..896b67e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 09cf2c20abdf7ea428bd3f1c68941949 +timeCreated: 1446193147 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs new file mode 100644 index 0000000..52e00af --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs @@ -0,0 +1,159 @@ +using FairyGUI; +using UnityEngine; + +public class JoystickModule : EventDispatcher +{ + float _InitX; + float _InitY; + float _startStageX; + float _startStageY; + float _lastStageX; + float _lastStageY; + GButton _button; + GObject _touchArea; + GObject _thumb; + GObject _center; + int touchId; + GTweener _tweener; + + public EventListener onMove { get; private set; } + public EventListener onEnd { get; private set; } + + public int radius { get; set; } + + public JoystickModule(GComponent mainView) + { + onMove = new EventListener(this, "onMove"); + onEnd = new EventListener(this, "onEnd"); + + _button = mainView.GetChild("joystick").asButton; + _button.changeStateOnClick = false; + _thumb = _button.GetChild("thumb"); + _touchArea = mainView.GetChild("joystick_touch"); + _center = mainView.GetChild("joystick_center"); + + _InitX = _center.x + _center.width / 2; + _InitY = _center.y + _center.height / 2; + touchId = -1; + radius = 150; + + _touchArea.onTouchBegin.Add(this.OnTouchBegin); + _touchArea.onTouchMove.Add(this.OnTouchMove); + _touchArea.onTouchEnd.Add(this.OnTouchEnd); + } + + public void Trigger(EventContext context) + { + OnTouchBegin(context); + } + + private void OnTouchBegin(EventContext context) + { + if (touchId == -1)//First touch + { + InputEvent evt = (InputEvent)context.data; + touchId = evt.touchId; + + if (_tweener != null) + { + _tweener.Kill(); + _tweener = null; + } + + Vector2 pt = GRoot.inst.GlobalToLocal(new Vector2(evt.x, evt.y)); + float bx = pt.x; + float by = pt.y; + _button.selected = true; + + if (bx < 0) + bx = 0; + else if (bx > _touchArea.width) + bx = _touchArea.width; + + if (by > GRoot.inst.height) + by = GRoot.inst.height; + else if (by < _touchArea.y) + by = _touchArea.y; + + _lastStageX = bx; + _lastStageY = by; + _startStageX = bx; + _startStageY = by; + + _center.visible = true; + _center.SetXY(bx - _center.width / 2, by - _center.height / 2); + _button.SetXY(bx - _button.width / 2, by - _button.height / 2); + + float deltaX = bx - _InitX; + float deltaY = by - _InitY; + float degrees = Mathf.Atan2(deltaY, deltaX) * 180 / Mathf.PI; + _thumb.rotation = degrees + 90; + + context.CaptureTouch(); + } + } + + private void OnTouchEnd(EventContext context) + { + InputEvent inputEvt = (InputEvent)context.data; + if (touchId != -1 && inputEvt.touchId == touchId) + { + touchId = -1; + _thumb.rotation = _thumb.rotation + 180; + _center.visible = false; + _tweener = _button.TweenMove(new Vector2(_InitX - _button.width / 2, _InitY - _button.height / 2), 0.3f).OnComplete(() => + { + _tweener = null; + _button.selected = false; + _thumb.rotation = 0; + _center.visible = true; + _center.SetXY(_InitX - _center.width / 2, _InitY - _center.height / 2); + } + ); + + this.onEnd.Call(); + } + } + + private void OnTouchMove(EventContext context) + { + InputEvent evt = (InputEvent)context.data; + if (touchId != -1 && evt.touchId == touchId) + { + Vector2 pt = GRoot.inst.GlobalToLocal(new Vector2(evt.x, evt.y)); + float bx = pt.x; + float by = pt.y; + float moveX = bx - _lastStageX; + float moveY = by - _lastStageY; + _lastStageX = bx; + _lastStageY = by; + float buttonX = _button.x + moveX; + float buttonY = _button.y + moveY; + + float offsetX = buttonX + _button.width / 2 - _startStageX; + float offsetY = buttonY + _button.height / 2 - _startStageY; + + float rad = Mathf.Atan2(offsetY, offsetX); + float degree = rad * 180 / Mathf.PI; + _thumb.rotation = degree + 90; + + float maxX = radius * Mathf.Cos(rad); + float maxY = radius * Mathf.Sin(rad); + if (Mathf.Abs(offsetX) > Mathf.Abs(maxX)) + offsetX = maxX; + if (Mathf.Abs(offsetY) > Mathf.Abs(maxY)) + offsetY = maxY; + + buttonX = _startStageX + offsetX; + buttonY = _startStageY + offsetY; + if (buttonX < 0) + buttonX = 0; + if (buttonY > GRoot.inst.height) + buttonY = GRoot.inst.height; + + _button.SetXY(buttonX - _button.width / 2, buttonY - _button.height / 2); + + this.onMove.Call(degree); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs.meta b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs.meta new file mode 100644 index 0000000..2e42949 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Joystick/JoystickModule.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c3af309cbf1dcb94f88c9484271c4c9d +timeCreated: 1446193148 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/LoopList.meta b/Assets/Plugins/FairyGUI/Examples/LoopList.meta new file mode 100644 index 0000000..26de28c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/LoopList.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7b7ffb771e0a22b4ebf0a7c2bed7d802 +folderAsset: yes +timeCreated: 1456388404 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs b/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs new file mode 100644 index 0000000..0ae15a1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs @@ -0,0 +1,63 @@ +using UnityEngine; +using FairyGUI; + +public class LoopListMain : MonoBehaviour +{ + GComponent _mainView; + GList _list; + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + UIPackage.AddPackage("UI/LoopList"); + + _mainView = this.GetComponent().ui; + + _list = _mainView.GetChild("list").asList; + _list.SetVirtualAndLoop(); + + _list.itemRenderer = RenderListItem; + _list.numItems = 5; + _list.scrollPane.onScroll.Add(DoSpecialEffect); + + DoSpecialEffect(); + } + + void DoSpecialEffect() + { + //change the scale according to the distance to middle + float midX = _list.scrollPane.posX + _list.viewWidth / 2; + int cnt = _list.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject obj = _list.GetChildAt(i); + float dist = Mathf.Abs(midX - obj.x - obj.width / 2); + if (dist > obj.width) //no intersection + obj.SetScale(1, 1); + else + { + float ss = 1 + (1 - dist / obj.width) * 0.24f; + obj.SetScale(ss, ss); + } + } + + _mainView.GetChild("n3").text = "" + ((_list.GetFirstChildInView() + 1) % _list.numItems); + } + + void RenderListItem(int index, GObject obj) + { + GButton item = (GButton)obj; + item.SetPivot(0.5f, 0.5f); + item.icon = UIPackage.GetItemURL("LoopList", "n" + (index + 1)); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs.meta new file mode 100644 index 0000000..c50012e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/LoopList/LoopListMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bab7cb69f587250498d0079f0e323fb0 +timeCreated: 1456388407 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting.meta b/Assets/Plugins/FairyGUI/Examples/ModalWaiting.meta new file mode 100644 index 0000000..05f2cac --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/ModalWaiting.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7d56bcf9c2887a841b07c14e421e98d5 +folderAsset: yes +timeCreated: 1447054712 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs new file mode 100644 index 0000000..969e55c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs @@ -0,0 +1,47 @@ +using System.Collections; +using UnityEngine; +using FairyGUI; + +public class ModalWaitingMain : MonoBehaviour +{ + GComponent _mainView; + Window4 _testWin; + + void Awake() + { + UIPackage.AddPackage("UI/ModalWaiting"); + UIConfig.globalModalWaiting = "ui://ModalWaiting/GlobalModalWaiting"; + UIConfig.windowModalWaiting = "ui://ModalWaiting/WindowModalWaiting"; + } + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + _testWin = new Window4(); + + _mainView.GetChild("n0").onClick.Add(() => { _testWin.Show(); }); + + StartCoroutine(WaitSomeTime()); + } + + IEnumerator WaitSomeTime() + { + GRoot.inst.ShowModalWait(); + + yield return new WaitForSeconds(3); + + GRoot.inst.CloseModalWait(); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs.meta new file mode 100644 index 0000000..0dbe5b4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/ModalWaitingMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 81df70f0eca40f24eb4d6448b5e3ed22 +timeCreated: 1447054712 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs new file mode 100644 index 0000000..a6fad6d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs @@ -0,0 +1,20 @@ +using FairyGUI; + +public class Window4 : Window +{ + public Window4() + { + } + + protected override void OnInit() + { + this.contentPane = UIPackage.CreateObject("ModalWaiting", "TestWin").asCom; + this.contentPane.GetChild("n1").onClick.Add(OnClick); + } + + void OnClick() + { + this.ShowModalWait(); + Timers.inst.Add(3, 1, (object param) => { this.CloseModalWait(); }); + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs.meta b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs.meta new file mode 100644 index 0000000..5ff4f79 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/ModalWaiting/Window4.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ac9ab786f60351340a5de178d7d19c0d +timeCreated: 1447054712 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Model.meta b/Assets/Plugins/FairyGUI/Examples/Model.meta new file mode 100644 index 0000000..1e64b70 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Model.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0b78b9866af43744b820fe19b605d80a +folderAsset: yes +timeCreated: 1456389889 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs b/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs new file mode 100644 index 0000000..0d7382d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using FairyGUI; + +public class ModelMain : MonoBehaviour +{ + GComponent _mainView; + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + Object prefab = Resources.Load("Role/npc"); + GameObject go = (GameObject)Object.Instantiate(prefab); + go.transform.localPosition = new Vector3(61, -89, 1000); //set z to far from UICamera is important! + go.transform.localScale = new Vector3(180, 180, 180); + go.transform.localEulerAngles = new Vector3(0, 100, 0); + _mainView.GetChild("holder").asGraph.SetNativeObject(new GoWrapper(go)); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs.meta new file mode 100644 index 0000000..e0b0cd6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Model/ModelMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: eabf5f06c048be84cbc8226659385e1f +timeCreated: 1456390000 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Particles.meta b/Assets/Plugins/FairyGUI/Examples/Particles.meta new file mode 100644 index 0000000..77a8e97 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Particles.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: df311ae819dccf7428102e1700e12ae1 +folderAsset: yes +timeCreated: 1446730751 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs b/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs new file mode 100644 index 0000000..6dd1a18 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using FairyGUI; + +public class CoolComponent : GComponent +{ + public override void ConstructFromXML(FairyGUI.Utils.XML cxml) + { + base.ConstructFromXML(cxml); + + GGraph graph = this.GetChild("effect").asGraph; + + Object prefab = Resources.Load("Flame"); + GameObject go = (GameObject)Object.Instantiate(prefab); + graph.SetNativeObject(new GoWrapper(go)); + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs.meta b/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs.meta new file mode 100644 index 0000000..c64195f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Particles/CoolComponent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b5abdea97f302e7438821d427b458651 +timeCreated: 1446781797 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs b/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs new file mode 100644 index 0000000..c2db087 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs @@ -0,0 +1,37 @@ +using UnityEngine; +using FairyGUI; + +public class ParticlesMain : MonoBehaviour +{ + GComponent _mainView; + + void Awake() + { + UIPackage.AddPackage("UI/Particles"); + + UIObjectFactory.SetPackageItemExtension("ui://Particles/CoolComponent", typeof(CoolComponent)); + } + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + Object prefab = Resources.Load("Flame"); + GameObject go = (GameObject)Object.Instantiate(prefab); + _mainView.GetChild("holder").asGraph.SetNativeObject(new GoWrapper(go)); + + _mainView.GetChild("c0").draggable = true; + _mainView.GetChild("c1").draggable = true; + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs.meta new file mode 100644 index 0000000..82a01aa --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Particles/ParticlesMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1be113d23714dfb49819b314ffb3ffdc +timeCreated: 1446731503 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Perspetive.meta b/Assets/Plugins/FairyGUI/Examples/Perspetive.meta new file mode 100644 index 0000000..3f08dbe --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Perspetive.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 75bbf0b6726dd1c4685b6a5f8970b045 +folderAsset: yes +timeCreated: 1456393929 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs b/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs new file mode 100644 index 0000000..0357efd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs @@ -0,0 +1,29 @@ +using UnityEngine; +using FairyGUI; + +public class PerspectiveMain : MonoBehaviour +{ + GList _list; + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + //GComponent g1 = GameObject.Find("UIPanel1").GetComponent().ui; + + GComponent g2 = GameObject.Find("UIPanel2").GetComponent().ui; + _list = g2.GetChild("mailList").asList; + _list.SetVirtual(); + _list.itemRenderer = (int index, GObject obj) => { obj.text = index + " Mail title here"; }; + _list.numItems = 20; + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs.meta new file mode 100644 index 0000000..94a60e9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Perspetive/PerspectiveMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ccbee12c33459e546bf698dc4ca46bea +timeCreated: 1456393933 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh.meta b/Assets/Plugins/FairyGUI/Examples/PullToRefresh.meta new file mode 100644 index 0000000..980872c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/PullToRefresh.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4cd02b3a50ee7314290496197a8ad749 +folderAsset: yes +timeCreated: 1497251849 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs new file mode 100644 index 0000000..762f917 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using FairyGUI; + +public class PullToRefreshMain : MonoBehaviour +{ + GComponent _mainView; + GList _list1; + GList _list2; + + void Awake() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + UIObjectFactory.SetPackageItemExtension("ui://PullToRefresh/Header", typeof(ScrollPaneHeader)); + } + + void Start() + { + _mainView = this.GetComponent().ui; + + _list1 = _mainView.GetChild("list1").asList; + _list1.itemRenderer = RenderListItem1; + _list1.SetVirtual(); + _list1.numItems = 1; + _list1.scrollPane.onPullDownRelease.Add(OnPullDownToRefresh); + + _list2 = _mainView.GetChild("list2").asList; + _list2.itemRenderer = RenderListItem2; + _list2.SetVirtual(); + _list2.numItems = 1; + _list2.scrollPane.onPullUpRelease.Add(OnPullUpToRefresh); + } + + void RenderListItem1(int index, GObject obj) + { + GButton item = obj.asButton; + item.title = "Item " + (_list1.numItems - index - 1); + } + + void RenderListItem2(int index, GObject obj) + { + GButton item = obj.asButton; + item.title = "Item " + index; + } + + void OnPullDownToRefresh() + { + ScrollPaneHeader header = (ScrollPaneHeader)_list1.scrollPane.header; + if (header.ReadyToRefresh) + { + header.SetRefreshStatus(2); + _list1.scrollPane.LockHeader(header.sourceHeight); + + //Simulate a async resquest + Timers.inst.Add(2, 1, (object param) => + { + _list1.numItems += 5; + + //Refresh completed + header.SetRefreshStatus(3); + _list1.scrollPane.LockHeader(35); + + Timers.inst.Add(2, 1, (object param2) => + { + header.SetRefreshStatus(0); + _list1.scrollPane.LockHeader(0); + }); + }); + } + } + + void OnPullUpToRefresh() + { + GComponent footer = (GComponent)_list2.scrollPane.footer; + + footer.GetController("c1").selectedIndex = 1; + _list2.scrollPane.LockFooter(footer.sourceHeight); + + //Simulate a async resquest + Timers.inst.Add(2, 1, (object param) => + { + _list2.numItems += 5; + + //Refresh completed + footer.GetController("c1").selectedIndex = 0; + _list2.scrollPane.LockFooter(0); + }); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs.meta new file mode 100644 index 0000000..374cb90 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/PullToRefreshMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cc11ef8b3e553814d83688351418d0cf +timeCreated: 1497251849 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs new file mode 100644 index 0000000..66e1d83 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs @@ -0,0 +1,37 @@ +using FairyGUI; +using UnityEngine; + +public class ScrollPaneHeader : GComponent +{ + Controller _c1; + + public override void ConstructFromXML(FairyGUI.Utils.XML xml) + { + base.ConstructFromXML(xml); + + _c1 = this.GetController("c1"); + + this.onSizeChanged.Add(OnSizeChanged); + } + + void OnSizeChanged() + { + if (_c1.selectedIndex == 2 || _c1.selectedIndex == 3) + return; + + if (this.height > this.sourceHeight) + _c1.selectedIndex = 1; + else + _c1.selectedIndex = 0; + } + + public bool ReadyToRefresh + { + get { return _c1.selectedIndex == 1; } + } + + public void SetRefreshStatus(int value) + { + _c1.selectedIndex = value; + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs.meta b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs.meta new file mode 100644 index 0000000..6b2c18f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/PullToRefresh/ScrollPaneHeader.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 30c3bcfb5d9414e4d8f75eedcfddea9c +timeCreated: 1497253470 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture.meta b/Assets/Plugins/FairyGUI/Examples/RenderTexture.meta new file mode 100644 index 0000000..87a2655 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/RenderTexture.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f22327fed912f5d43a01c26c059c39ac +folderAsset: yes +timeCreated: 1446193142 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs new file mode 100644 index 0000000..5b8f035 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs @@ -0,0 +1,292 @@ +using FairyGUI; +using FairyGUI.Utils; +using System.Collections; +using UnityEngine; + +public class RenderImage +{ + public Transform modelRoot { get; private set; } + + Camera _camera; + Image _image; + Transform _root; + Transform _background; + Transform _model; + RenderTexture _renderTexture; + int _width; + int _height; + bool _cacheTexture; + float _rotating; + + const int RENDER_LAYER = 0; + const int HIDDEN_LAYER = 10; + + public RenderImage(GGraph holder) + { + _width = (int)holder.width; + _height = (int)holder.height; + _cacheTexture = true; + + this._image = new Image(); + holder.SetNativeObject(this._image); + + Object prefab = Resources.Load("RenderTexture/RenderImageCamera"); + GameObject go = (GameObject)Object.Instantiate(prefab); + _camera = go.GetComponent(); + _camera.transform.position = new Vector3(0, 1000, 0); + _camera.cullingMask = 1 << RENDER_LAYER; + _camera.enabled = false; + Object.DontDestroyOnLoad(_camera.gameObject); + + this._root = new GameObject("RenderImage").transform; + this._root.SetParent(_camera.transform, false); + SetLayer(this._root.gameObject, HIDDEN_LAYER); + + this.modelRoot = new GameObject("model_root").transform; + this.modelRoot.SetParent(this._root, false); + + this._background = new GameObject("background").transform; + this._background.SetParent(this._root, false); + + this._image.onAddedToStage.Add(OnAddedToStage); + this._image.onRemovedFromStage.Add(OnRemoveFromStage); + + if (this._image.stage != null) + OnAddedToStage(); + else + _camera.gameObject.SetActive(false); + } + + public void Dispose() + { + Object.Destroy(_camera.gameObject); + DestroyTexture(); + + this._image.Dispose(); + this._image = null; + } + + /// + /// The rendertexture is not transparent. So if you want to the UI elements can be seen in the back of the models/particles in rendertexture, + /// you can set a maximunm two images for background. + /// Be careful if your image is 9 grid scaling, you must make sure the place holder is inside the middle box(dont cover from border to middle). + /// + /// + public void SetBackground(GObject image) + { + SetBackground(image, null); + } + + /// + /// The rendertexture is not transparent. So if you want to the UI elements can be seen in the back of the models/particles in rendertexture, + /// you can set a maximunm two images for background. + /// + /// + /// + public void SetBackground(GObject image1, GObject image2) + { + Image source1 = (Image)image1.displayObject; + Image source2 = image2 != null ? (Image)image2.displayObject : null; + + Vector3 pos = _background.position; + pos.z = _camera.farClipPlane; + _background.position = pos; + + Vector2[] uv = new Vector2[4]; + Vector2[] uv2 = null; + + Rect rect = _image.TransformRect(new Rect(0, 0, this._width, this._height), source1); + Rect uvRect = GetImageUVRect(source1, rect, uv); + + if (source2 != null) + { + rect = _image.TransformRect(new Rect(0, 0, this._width, this._height), source2); + uv2 = new Vector2[4]; + GetImageUVRect(source2, rect, uv2); + } + + Vector3[] vertices = new Vector3[4]; + for (int i = 0; i < 4; i++) + { + Vector2 v = uv[i]; + vertices[i] = new Vector3((v.x - uvRect.x) / uvRect.width * 2 - 1, + (v.y - uvRect.y) / uvRect.height * 2 - 1, 0); + } + + Mesh mesh = new Mesh(); + mesh.vertices = vertices; + mesh.uv = uv; + if (uv2 != null) + mesh.uv2 = uv2; + mesh.colors32 = new Color32[] { Color.white, Color.white, Color.white, Color.white }; + mesh.triangles = new int[] { 0, 1, 2, 2, 3, 0 }; + + MeshFilter meshFilter = this._background.gameObject.GetComponent(); + if (meshFilter == null) + meshFilter = this._background.gameObject.AddComponent(); + meshFilter.mesh = mesh; + MeshRenderer meshRenderer = this._background.gameObject.GetComponent(); + if (meshRenderer == null) + meshRenderer = this._background.gameObject.AddComponent(); +#if (UNITY_5 || UNITY_5_3_OR_NEWER) + meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; +#else + meshRenderer.castShadows = false; +#endif + meshRenderer.receiveShadows = false; + Shader shader = Shader.Find("Game/FullScreen"); + Material mat = new Material(shader); + mat.mainTexture = source1.texture.nativeTexture; + if (source2 != null) + mat.SetTexture("_Tex2", source2.texture.nativeTexture); + meshRenderer.material = mat; + } + + Rect GetImageUVRect(Image image, Rect localRect, Vector2[] uv) + { + Rect imageRect = new Rect(0, 0, image.size.x, image.size.y); + Rect bound = ToolSet.Intersection(ref imageRect, ref localRect); + Rect uvRect = image.texture.uvRect; + + if (image.scale9Grid != null) + { + Rect gridRect = (Rect)image.scale9Grid; + float sourceW = image.texture.width; + float sourceH = image.texture.height; + uvRect = Rect.MinMaxRect(Mathf.Lerp(uvRect.xMin, uvRect.xMax, gridRect.xMin / sourceW), + Mathf.Lerp(uvRect.yMin, uvRect.yMax, (sourceH - gridRect.yMax) / sourceH), + Mathf.Lerp(uvRect.xMin, uvRect.xMax, gridRect.xMax / sourceW), + Mathf.Lerp(uvRect.yMin, uvRect.yMax, (sourceH - gridRect.yMin) / sourceH)); + + float vw = imageRect.width - (sourceW - gridRect.width); + float vh = imageRect.height - (sourceH - gridRect.height); + uvRect = Rect.MinMaxRect(Mathf.Lerp(uvRect.xMin, uvRect.xMax, (bound.x - gridRect.x) / vw), + Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMax - (sourceH - gridRect.yMax)) / vh), + Mathf.Lerp(uvRect.xMin, uvRect.xMax, (bound.xMax - gridRect.x) / vw), + Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMin - gridRect.y) / vh)); + } + else + { + uvRect = Rect.MinMaxRect(Mathf.Lerp(uvRect.xMin, uvRect.xMax, bound.xMin / imageRect.width), + Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMax) / imageRect.height), + Mathf.Lerp(uvRect.xMin, uvRect.xMax, bound.xMax / imageRect.width), + Mathf.Lerp(uvRect.yMin, uvRect.yMax, (imageRect.height - bound.yMin) / imageRect.height)); + } + + uv[0] = uvRect.position; + uv[1] = new Vector2(uvRect.xMin, uvRect.yMax); + uv[2] = new Vector2(uvRect.xMax, uvRect.yMax); + uv[3] = new Vector2(uvRect.xMax, uvRect.yMin); + + if (image.texture.rotated) + ToolSet.RotateUV(uv, ref image.texture.uvRect); + + return uvRect; + } + + public void LoadModel(string model) + { + this.UnloadModel(); + + Object prefab = Resources.Load(model); + GameObject go = ((GameObject)Object.Instantiate(prefab)); + _model = go.transform; + _model.SetParent(this.modelRoot, false); + } + + public void UnloadModel() + { + if (_model != null) + { + Object.Destroy(_model.gameObject); + _model = null; + } + _rotating = 0; + } + + public void StartRotate(float delta) + { + _rotating = delta; + } + + public void StopRotate() + { + _rotating = 0; + } + + void CreateTexture() + { + if (_renderTexture != null) + return; + + _renderTexture = new RenderTexture(_width, _height, 24, RenderTextureFormat.ARGB32) + { + antiAliasing = 1, + filterMode = FilterMode.Bilinear, + anisoLevel = 0, + useMipMap = false + }; + this._image.texture = new NTexture(_renderTexture); + this._image.blendMode = BlendMode.Off; + } + + void DestroyTexture() + { + if (_renderTexture != null) + { + Object.Destroy(_renderTexture); + _renderTexture = null; + this._image.texture = null; + } + } + + void OnAddedToStage() + { + if (_renderTexture == null) + CreateTexture(); + + Timers.inst.AddUpdate(this.Render); + _camera.gameObject.SetActive(true); + + Render(); + } + + void OnRemoveFromStage() + { + if (!_cacheTexture) + DestroyTexture(); + + Timers.inst.Remove(this.Render); + _camera.gameObject.SetActive(false); + } + + void Render(object param = null) + { + if (_rotating != 0 && this.modelRoot != null) + { + Vector3 localRotation = this.modelRoot.localRotation.eulerAngles; + localRotation.y += _rotating; + this.modelRoot.localRotation = Quaternion.Euler(localRotation); + } + + SetLayer(this._root.gameObject, RENDER_LAYER); + + _camera.targetTexture = this._renderTexture; + RenderTexture old = RenderTexture.active; + RenderTexture.active = this._renderTexture; + GL.Clear(true, true, Color.clear); + _camera.Render(); + RenderTexture.active = old; + + SetLayer(this._root.gameObject, HIDDEN_LAYER); + } + + void SetLayer(GameObject go, int layer) + { + Transform[] transforms = go.GetComponentsInChildren(true); + foreach (Transform t in transforms) + { + t.gameObject.layer = layer; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs.meta b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs.meta new file mode 100644 index 0000000..093c1aa --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderImage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aeda19930ca9fac4a84f365bf998d0cf +timeCreated: 1446193148 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs new file mode 100644 index 0000000..fbfc24f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using FairyGUI; + +public class RenderTextureMain : MonoBehaviour +{ + GComponent _mainView; + Window3 _testWin; + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + _testWin = new Window3(); + + _mainView.GetChild("n2").onClick.Add(() => { _testWin.Show(); }); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs.meta new file mode 100644 index 0000000..7dc675f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/RenderTexture/RenderTextureMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d029d4d78090c764a97f4497beff32e3 +timeCreated: 1446194671 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs b/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs new file mode 100644 index 0000000..9180c2a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using FairyGUI; +using UnityEngine; + +public class Window3 : Window +{ + RenderImage _renderImage; + + public Window3() + { + } + + protected override void OnInit() + { + this.contentPane = UIPackage.CreateObject("RenderTexture", "TestWin").asCom; + this.SetXY(200, 50); + + _renderImage = new RenderImage(contentPane.GetChild("holder").asGraph); + //RenderImage是不透明的,可以设置最多两张图片作为背景图 + _renderImage.SetBackground(contentPane.GetChild("frame").asCom.GetChild("n0"), contentPane.GetChild("n20")); + + contentPane.GetChild("btnLeft").onTouchBegin.Add(__clickLeft); + contentPane.GetChild("btnRight").onTouchBegin.Add(__clickRight); + } + + override protected void OnShown() + { + _renderImage.LoadModel("Role/npc"); + _renderImage.modelRoot.localPosition = new Vector3(0, -1.0f, 5f); + _renderImage.modelRoot.localScale = new Vector3(1, 1, 1); + _renderImage.modelRoot.localRotation = Quaternion.Euler(0, 120, 0); + } + + void __clickLeft() + { + _renderImage.StartRotate(-2); + Stage.inst.onTouchEnd.Add(__touchEnd); + } + + void __clickRight() + { + _renderImage.StartRotate(2); + Stage.inst.onTouchEnd.Add(__touchEnd); + } + + void __touchEnd() + { + _renderImage.StopRotate(); + Stage.inst.onTouchEnd.Remove(__touchEnd); + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs.meta b/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs.meta new file mode 100644 index 0000000..2737db7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/RenderTexture/Window3.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e19eee4cdc2f5764c8991f5aaad3754b +timeCreated: 1447054712 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources.meta b/Assets/Plugins/FairyGUI/Examples/Resources.meta new file mode 100644 index 0000000..1c4366c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3c89aebc44f76dc47855d7b455026700 +folderAsset: yes +timeCreated: 1449041031 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown.meta new file mode 100644 index 0000000..43db5a8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f2a07f54f3dd8e948a37ff08b62569f9 +folderAsset: yes +timeCreated: 1447172581 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png new file mode 100644 index 0000000..f40e06b Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png.meta new file mode 100644 index 0000000..fe88679 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k0.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 6b193ab9468c3b74590657e2d92b0eea +timeCreated: 1446006669 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png new file mode 100644 index 0000000..49299f8 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png.meta new file mode 100644 index 0000000..73cc69e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Cooldown/k1.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: f396206c6676c384cb91c6498b66a216 +timeCreated: 1446012070 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Curve.meta new file mode 100644 index 0000000..67c2b2e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Curve.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 09da2afb7a34e0e4ca71b6e7f413252c +folderAsset: yes +timeCreated: 1462114991 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat new file mode 100644 index 0000000..c3713ef --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat @@ -0,0 +1,108 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New Material + m_Shader: {fileID: 4800000, guid: 263c97191482b3649ac7bf0810cc4f77, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: + - _EMISSION + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + 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} + - _DetailBump: + 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} + - _DetailTex: + 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} + - _MainBump: + 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_Ints: [] + m_Floats: + - _BlendDstFactor: 10 + - _BlendSrcFactor: 5 + - _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 + - _Shininess: 0.2 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _Strength: 0.2 + - _UVSec: 0 + - _UseUIAlphaClip: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular: {r: 0, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat.meta new file mode 100644 index 0000000..6cbc7da --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/New Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec52002c32d42344f96be9a0561d52f8 +timeCreated: 1461431446 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX new file mode 100644 index 0000000..18ff2b7 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX.meta new file mode 100644 index 0000000..9de8cd1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Curve/aomian.FBX.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 442eade8c078c3e4ca12a9990b30a6b3 +timeCreated: 1461740092 +licenseType: Pro +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2300000: //RootNode + 3300000: //RootNode + 4300000: Plane02 + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: "\u6807\u51C6_7" + second: {fileID: 2100000, guid: efd0b1293e5bf5e48b0934a7db8c9790, type: 2} + materials: + importMaterials: 0 + materialName: 0 + materialSearch: 1 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 0 + importBlendShapes: 1 + importCameras: 0 + importLights: 0 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples.meta new file mode 100644 index 0000000..d065be9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e596969c20c3a5b479a4fccc3846a158 +folderAsset: yes +timeCreated: 1540889270 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects.meta new file mode 100644 index 0000000..e0a622a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d171af73706b94848aae8155091f8359 +folderAsset: yes +timeCreated: 1540889270 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials.meta new file mode 100644 index 0000000..f9eaba2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: adf33bc6bcb1c4a48919363779800f0e +folderAsset: yes +timeCreated: 1540889270 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat new file mode 100644 index 0000000..207e107 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat @@ -0,0 +1,139 @@ +%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: EmbersParticle + m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 10300, guid: 0000000000000000f000000000000000, type: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _Normal + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 0 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0.5 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _InvFade + second: 3 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 0 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 1 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 1 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _TintColor + second: {r: 1, g: 1, b: 1, a: 0.5} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat.meta new file mode 100644 index 0000000..253751e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/EmbersParticle.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 776677ab3818fb249adaca05f4e04545 +timeCreated: 1471532950 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat new file mode 100644 index 0000000..c78ef12 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat @@ -0,0 +1,142 @@ +%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: FlameRoundYellowParticle + m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHABLEND_ON _EMISSION + m_LightmapFlags: 1 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + - first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 408718fd5f763de42b12f849570ddf58, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - first: + name: _SpecGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - first: + name: _BumpScale + second: 1 + - first: + name: _Cutoff + second: 0.5 + - first: + name: _DetailNormalMapScale + second: 1 + - first: + name: _DstBlend + second: 10 + - first: + name: _GlossMapScale + second: 1 + - first: + name: _Glossiness + second: 0 + - first: + name: _GlossyReflections + second: 1 + - first: + name: _InvFade + second: 1.08 + - first: + name: _Metallic + second: 0 + - first: + name: _Mode + second: 2 + - first: + name: _OcclusionStrength + second: 1 + - first: + name: _Parallax + second: 0.02 + - first: + name: _SmoothnessTextureChannel + second: 0 + - first: + name: _SpecularHighlights + second: 1 + - first: + name: _SrcBlend + second: 5 + - first: + name: _UVSec + second: 0 + - first: + name: _ZWrite + second: 0 + m_Colors: + - first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + - first: + name: _EmissionColor + second: {r: 2.691177, g: 1.7967563, b: 0.45512548, a: 1} + - first: + name: _SpecColor + second: {r: 0, g: 0, b: 0, a: 1} + - first: + name: _TintColor + second: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat.meta new file mode 100644 index 0000000..b13f4a8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Materials/FlameRoundYellowParticle.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7f098ed9997e714193be5e86df013f4 +timeCreated: 1472825013 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures.meta new file mode 100644 index 0000000..f00cba7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ce0e4ec1bd0849344987f11ae258efc8 +folderAsset: yes +timeCreated: 1540889270 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif new file mode 100644 index 0000000..ac36e19 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif.meta new file mode 100644 index 0000000..cb1c49d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/FireExplosionEffects/Textures/FlameRoundParticleSheet.tif.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 408718fd5f763de42b12f849570ddf58 +timeCreated: 1474988750 +licenseType: Store +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: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + 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: 1 + 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 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared.meta new file mode 100644 index 0000000..bcd4bd5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a08394102f0a3df47b722e7ea7dd4919 +folderAsset: yes +timeCreated: 1540889270 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs.meta new file mode 100644 index 0000000..e8c1cd7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7ec6e3a0e2444d64c8df41cd39e51077 +folderAsset: yes +timeCreated: 1540889270 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab new file mode 100644 index 0000000..7becdd5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000011210275196} + m_IsPrefabParent: 1 +--- !u!1 &1000011210275196 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010154436032} + - component: {fileID: 108000013609061350} + m_Layer: 0 + m_Name: ParticlesLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010154436032 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011210275196} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: -11.65, y: 1.29, z: 4.89} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!108 &108000013609061350 +Light: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011210275196} + m_Enabled: 1 + serializedVersion: 7 + m_Type: 2 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 4 + 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_ShadowRadius: 0 + m_ShadowAngle: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab.meta new file mode 100644 index 0000000..2a0c9ce --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/EffectExamples/Shared/Prefabs/ParticlesLight.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa35d75604d172d48b7a6b62a07c7dbf +timeCreated: 1472572134 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab new file mode 100644 index 0000000..f19c302 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab @@ -0,0 +1,10071 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000010823978654} + m_IsPrefabParent: 1 +--- !u!1 &1000010646992276 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000011600473472} + - component: {fileID: 198000012351162682} + - component: {fileID: 199000013425100488} + m_Layer: 0 + m_Name: Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010823978654 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000010409153280} + - component: {fileID: 198000013227194214} + - component: {fileID: 199000010346745340} + m_Layer: 0 + m_Name: Flame + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000013439165456 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4000012936073094} + - component: {fileID: 198000013621194436} + - component: {fileID: 199000010792666018} + m_Layer: 0 + m_Name: FireEmbers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4000010409153280 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010823978654} + m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -10.45, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4000012936073094} + - {fileID: 4000011600473472} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000011600473472 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010646992276} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1.07} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 4000010409153280} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4000012936073094 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013439165456} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.028, y: 0.112, z: 0.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4000010409153280} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!198 &198000012351162682 +ParticleSystem: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010646992276} + serializedVersion: 5 + lengthInSec: 3 + simulationSpeed: 2 + stopAction: 0 + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 2002730548 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 3 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + ShapeModule: + serializedVersion: 5 + enabled: 0 + type: 4 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 1 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + m_BurstCount: 1 + m_Bursts: + - serializedVersion: 2 + time: 0 + countCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 0.7254902, b: 0, a: 1} + key1: {r: 1, g: 0.7254902, b: 0, a: 0.7411765} + key2: {r: 0, g: 0, b: 0, a: 1} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 31418 + atime2: 65535 + atime3: 65535 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + enabled: 0 + mode: 0 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + flipU: 0 + flipV: 0 + randomRow: 1 + sprites: + - sprite: {fileID: 0} + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + enabled: 0 + multiplier: 1 + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 1 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.2 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.2 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 1 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 2 + emitter: {fileID: 0} + type: 0 + properties: 0 + LightsModule: + enabled: 1 + ratio: 1 + light: {fileID: 108000013609061350, guid: fa35d75604d172d48b7a6b62a07c7dbf, type: 2} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 10 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 3 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + maxLights: 1 + TrailModule: + enabled: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minVertexDistance: 0.2 + textureMode: 0 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_3: W +--- !u!198 &198000013227194214 +ParticleSystem: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010823978654} + serializedVersion: 5 + lengthInSec: 5 + simulationSpeed: 2 + stopAction: 0 + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: -474648680 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 3 + scalar: 4 + minScalar: 4 + maxCurve: + 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 + minCurve: + 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 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 3 + scalar: 2 + minScalar: 2 + maxCurve: + 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 + minCurve: + 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 + startSizeY: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 0 + maxCurve: + 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 + minCurve: + 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 + startSizeZ: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 0 + maxCurve: + 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 + minCurve: + 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 + startRotationX: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 0 + maxCurve: + 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 + minCurve: + 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 + startRotationY: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 0 + maxCurve: + 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 + minCurve: + 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 + startRotation: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 0 + maxCurve: + 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 + minCurve: + 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 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + ShapeModule: + serializedVersion: 5 + enabled: 1 + type: 10 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 0.6556562 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 5 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.5 + inSlope: -1.1944004 + outSlope: -1.1944004 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853981 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 0.7882353, g: 0.5803922, b: 0.31764707, a: 1} + key1: {r: 1, g: 0.27058825, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 52814 + atime2: 65535 + atime3: 65535 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + enabled: 1 + mode: 0 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + tilesX: 10 + tilesY: 5 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + flipU: 0 + flipV: 0 + randomRow: 1 + sprites: + - sprite: {fileID: 0} + VelocityModule: + enabled: 1 + x: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0.01098901 + outSlope: 0.01098901 + tangentMode: 34 + - serializedVersion: 2 + time: 1 + value: 0.01098901 + inSlope: 0.01098901 + outSlope: 0.01098901 + tangentMode: 34 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + minCurve: + 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 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.109890155 + inSlope: 0.2850273 + outSlope: 0.2850273 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1.754015 + outSlope: 1.754015 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 0 + maxCurve: + 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 + minCurve: + 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 + inWorldSpace: 1 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + enabled: 0 + multiplier: 1 + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 1 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + NoiseModule: + enabled: 1 + strength: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.5 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.0000000018626451 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2.0065925 + outSlope: 2.0065925 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + strengthY: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.5 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + strengthZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 0 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 1 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.2 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 0.23076923 + inSlope: -1.4293909 + outSlope: -1.4293909 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853981 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 1 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 2 + emitter: {fileID: 0} + type: 0 + properties: 0 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + maxLights: 20 + TrailModule: + enabled: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minVertexDistance: 0.2 + textureMode: 0 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_3: W +--- !u!198 &198000013621194436 +ParticleSystem: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013439165456} + serializedVersion: 5 + lengthInSec: 5 + simulationSpeed: 1 + stopAction: 0 + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 0 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 1112701312 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 3 + scalar: 3 + minScalar: 0.5 + maxCurve: + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.16666667 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + startSpeed: + serializedVersion: 2 + minMaxState: 3 + scalar: 2 + minScalar: 1 + maxCurve: + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 0.6901961, b: 0.3529412, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 3 + scalar: 0.1 + minScalar: 0.05 + maxCurve: + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + startSizeY: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 0 + maxCurve: + 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 + minCurve: + 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 + startSizeZ: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 0 + maxCurve: + 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 + minCurve: + 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 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + ShapeModule: + serializedVersion: 5 + enabled: 1 + type: 8 + angle: 32.22 + length: 0.12 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 0.76 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 20 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 0} + key1: {r: 0.91764706, g: 0.39607844, b: 0, a: 1} + key2: {r: 0, g: 0, b: 0, a: 1} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 6168 + atime2: 53199 + atime3: 65535 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 4 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + enabled: 0 + mode: 0 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + flipU: 0 + flipV: 0 + randomRow: 1 + sprites: + - sprite: {fileID: 0} + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.2 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + inWorldSpace: 1 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + enabled: 0 + multiplier: 1 + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 1 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + NoiseModule: + enabled: 1 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.5 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.5 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 1 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 2 + emitter: {fileID: 0} + type: 0 + properties: 0 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + maxLights: 20 + TrailModule: + enabled: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minVertexDistance: 0.2 + textureMode: 0 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + - serializedVersion: 2 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 2 + time: 0 + value: 0 + 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 + vectorLabel1_3: W +--- !u!199 &199000010346745340 +ParticleSystemRenderer: + serializedVersion: 4 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010823978654} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 2100000, guid: d7f098ed9997e714193be5e86df013f4, type: 2} + - {fileID: 0} + 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_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 1 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: -0.15, z: 0} + m_UseCustomVertexStreams: 0 + m_VertexStreams: 0001030405 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 +--- !u!199 &199000010792666018 +ParticleSystemRenderer: + serializedVersion: 4 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000013439165456} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 2100000, guid: 776677ab3818fb249adaca05f4e04545, type: 2} + - {fileID: 0} + 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_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 1 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0.1 + m_LengthScale: 0 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_VertexStreams: 0001030405 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 +--- !u!199 &199000013425100488 +ParticleSystemRenderer: + serializedVersion: 4 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010646992276} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 10301, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 0} + 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_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 5 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_VertexStreams: 0001030405 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab.meta new file mode 100644 index 0000000..b4cf001 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Flame.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3228a22491941734bb83ad691d17fcb9 +timeCreated: 1473159169 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts.meta new file mode 100644 index 0000000..c1b925b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1261df48d5c0dae4da319464f8d5933b +folderAsset: yes +timeCreated: 1446196284 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset new file mode 100644 index 0000000..b59e03d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset @@ -0,0 +1,1602 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: LiberationSans SDF + m_EditorClassIdentifier: + hashCode: 231247347 + material: {fileID: 783799688297434243} + materialHashCode: 198912371 + m_Version: 1.1.0 + m_SourceFontFileGUID: d773920d064f540f18ab094416a6864d + m_SourceFontFile_EditorRef: {fileID: 12800000, guid: d773920d064f540f18ab094416a6864d, + type: 3} + m_SourceFontFile: {fileID: 12800000, guid: d773920d064f540f18ab094416a6864d, type: 3} + m_AtlasPopulationMode: 1 + m_FaceInfo: + m_FaceIndex: 0 + m_FamilyName: Liberation Sans + m_StyleName: Regular + m_PointSize: 60 + m_Scale: 1 + m_UnitsPerEM: 2048 + m_LineHeight: 68.99414 + m_AscentLine: 54.316402 + m_CapLine: 41 + m_MeanLine: 32 + m_Baseline: 0 + m_DescentLine: -12.714843 + m_SuperscriptOffset: 54.316402 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -12.714843 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -8.5546875 + m_UnderlineThickness: 4.3945312 + m_StrikethroughOffset: 12.8 + m_StrikethroughThickness: 4.3945312 + m_TabWidth: 17 + m_GlyphTable: + - m_Index: 3 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 16.671875 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 10 + m_Metrics: + m_Width: 5.390625 + m_Height: 12.984375 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 11.453125 + m_GlyphRect: + m_X: 10 + m_Y: 96 + m_Width: 6 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 40 + m_Metrics: + m_Width: 32.515625 + m_Height: 41.28125 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 40.015625 + m_GlyphRect: + m_X: 204 + m_Y: 191 + m_Width: 34 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 41 + m_Metrics: + m_Width: 29.328125 + m_Height: 41.28125 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 36.65625 + m_GlyphRect: + m_X: 347 + m_Y: 113 + m_Width: 31 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 42 + m_Metrics: + m_Width: 39.171875 + m_Height: 42.484375 + m_HorizontalBearingX: 3.015625 + m_HorizontalBearingY: 41.890625 + m_HorizontalAdvance: 46.671875 + m_GlyphRect: + m_X: 257 + m_Y: 138 + m_Width: 40 + m_Height: 43 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 43 + m_Metrics: + m_Width: 33.515625 + m_Height: 41.28125 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 43.328125 + m_GlyphRect: + m_X: 445 + m_Y: 74 + m_Width: 35 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 44 + m_Metrics: + m_Width: 5.609375 + m_Height: 41.28125 + m_HorizontalBearingX: 5.53125 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 16.671875 + m_GlyphRect: + m_X: 151 + m_Y: 166 + m_Width: 7 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 48 + m_Metrics: + m_Width: 40.140625 + m_Height: 41.28125 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 49.984375 + m_GlyphRect: + m_X: 514 + m_Y: 10 + m_Width: 42 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 49 + m_Metrics: + m_Width: 33.515625 + m_Height: 41.28125 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 43.328125 + m_GlyphRect: + m_X: 569 + m_Y: 71 + m_Width: 35 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 51 + m_Metrics: + m_Width: 31.9375 + m_Height: 41.28125 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 40.015625 + m_GlyphRect: + m_X: 575 + m_Y: 10 + m_Width: 33 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 54 + m_Metrics: + m_Width: 34.546875 + m_Height: 42.484375 + m_HorizontalBearingX: 2.71875 + m_HorizontalBearingY: 41.890625 + m_HorizontalAdvance: 40.015625 + m_GlyphRect: + m_X: 514 + m_Y: 71 + m_Width: 36 + m_Height: 43 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 55 + m_Metrics: + m_Width: 33.9375 + m_Height: 41.28125 + m_HorizontalBearingX: 1.34375 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 36.65625 + m_GlyphRect: + m_X: 65 + m_Y: 10 + m_Width: 35 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 56 + m_Metrics: + m_Width: 34.078125 + m_Height: 41.875 + m_HorizontalBearingX: 4.625 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 43.328125 + m_GlyphRect: + m_X: 627 + m_Y: 10 + m_Width: 35 + m_Height: 43 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 58 + m_Metrics: + m_Width: 56.15625 + m_Height: 41.28125 + m_HorizontalBearingX: 0.265625 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 56.625 + m_GlyphRect: + m_X: 105 + m_Y: 227 + m_Width: 57 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 60 + m_Metrics: + m_Width: 37.390625 + m_Height: 41.28125 + m_HorizontalBearingX: 1.3125 + m_HorizontalBearingY: 41.28125 + m_HorizontalAdvance: 40.015625 + m_GlyphRect: + m_X: 46 + m_Y: 236 + m_Width: 38 + m_Height: 42 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 66 + m_Metrics: + m_Width: 34.953125 + m_Height: 3.8125 + m_HorizontalBearingX: -0.90625 + m_HorizontalBearingY: -8.109375 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 10 + m_Y: 10 + m_Width: 36 + m_Height: 4 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 68 + m_Metrics: + m_Width: 30.828125 + m_Height: 32.875 + m_HorizontalBearingX: 2.546875 + m_HorizontalBearingY: 32.28125 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 416 + m_Y: 10 + m_Width: 32 + m_Height: 34 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 69 + m_Metrics: + m_Width: 26.96875 + m_Height: 44.078125 + m_HorizontalBearingX: 3.875 + m_HorizontalBearingY: 43.484375 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 306 + m_Y: 10 + m_Width: 28 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 70 + m_Metrics: + m_Width: 25.875 + m_Height: 32.875 + m_HorizontalBearingX: 2.546875 + m_HorizontalBearingY: 32.28125 + m_HorizontalAdvance: 30 + m_GlyphRect: + m_X: 214 + m_Y: 10 + m_Width: 27 + m_Height: 34 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 71 + m_Metrics: + m_Width: 26.984375 + m_Height: 44.078125 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 43.484375 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 467 + m_Y: 10 + m_Width: 28 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 72 + m_Metrics: + m_Width: 28.15625 + m_Height: 32.875 + m_HorizontalBearingX: 2.546875 + m_HorizontalBearingY: 32.28125 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 119 + m_Y: 10 + m_Width: 29 + m_Height: 34 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 73 + m_Metrics: + m_Width: 15.921875 + m_Height: 43.421875 + m_HorizontalBearingX: 0.84375 + m_HorizontalBearingY: 43.421875 + m_HorizontalAdvance: 16.671875 + m_GlyphRect: + m_X: 262 + m_Y: 73 + m_Width: 17 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 74 + m_Metrics: + m_Width: 26.984375 + m_Height: 44.65625 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 32.203125 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 398 + m_Y: 63 + m_Width: 28 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 75 + m_Metrics: + m_Width: 25.3125 + m_Height: 43.484375 + m_HorizontalBearingX: 4.15625 + m_HorizontalBearingY: 43.484375 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 10 + m_Y: 33 + m_Width: 26 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 76 + m_Metrics: + m_Width: 5.265625 + m_Height: 43.484375 + m_HorizontalBearingX: 4.015625 + m_HorizontalBearingY: 43.484375 + m_HorizontalAdvance: 13.328125 + m_GlyphRect: + m_X: 55 + m_Y: 71 + m_Width: 6 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 77 + m_Metrics: + m_Width: 10.75 + m_Height: 55.9375 + m_HorizontalBearingX: -1.46875 + m_HorizontalBearingY: 43.484375 + m_HorizontalAdvance: 13.328125 + m_GlyphRect: + m_X: 179 + m_Y: 75 + m_Width: 12 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 78 + m_Metrics: + m_Width: 26.046875 + m_Height: 43.484375 + m_HorizontalBearingX: 4.046875 + m_HorizontalBearingY: 43.484375 + m_HorizontalAdvance: 30 + m_GlyphRect: + m_X: 260 + m_Y: 10 + m_Width: 27 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 79 + m_Metrics: + m_Width: 5.265625 + m_Height: 43.484375 + m_HorizontalBearingX: 4.046875 + m_HorizontalBearingY: 43.484375 + m_HorizontalAdvance: 13.328125 + m_GlyphRect: + m_X: 179 + m_Y: 151 + m_Width: 6 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 80 + m_Metrics: + m_Width: 42.046875 + m_Height: 32.28125 + m_HorizontalBearingX: 3.984375 + m_HorizontalBearingY: 32.28125 + m_HorizontalAdvance: 49.984375 + m_GlyphRect: + m_X: 353 + m_Y: 10 + m_Width: 44 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 81 + m_Metrics: + m_Width: 25.484375 + m_Height: 32.28125 + m_HorizontalBearingX: 3.984375 + m_HorizontalBearingY: 32.28125 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 10 + m_Y: 134 + m_Width: 27 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 82 + m_Metrics: + m_Width: 28.328125 + m_Height: 32.875 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 32.28125 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 214 + m_Y: 73 + m_Width: 29 + m_Height: 34 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 83 + m_Metrics: + m_Width: 26.96875 + m_Height: 44.703125 + m_HorizontalBearingX: 3.875 + m_HorizontalBearingY: 32.25 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 210 + m_Y: 126 + m_Width: 28 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 84 + m_Metrics: + m_Width: 27.015625 + m_Height: 44.734375 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 32.28125 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 167 + m_Y: 10 + m_Width: 28 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 85 + m_Metrics: + m_Width: 15 + m_Height: 32.28125 + m_HorizontalBearingX: 3.984375 + m_HorizontalBearingY: 32.28125 + m_HorizontalAdvance: 19.984375 + m_GlyphRect: + m_X: 80 + m_Y: 71 + m_Width: 16 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 86 + m_Metrics: + m_Width: 26.15625 + m_Height: 32.796875 + m_HorizontalBearingX: 1.671875 + m_HorizontalBearingY: 32.203125 + m_HorizontalAdvance: 30 + m_GlyphRect: + m_X: 105 + m_Y: 166 + m_Width: 27 + m_Height: 34 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 87 + m_Metrics: + m_Width: 15.328125 + m_Height: 39.265625 + m_HorizontalBearingX: 0.90625 + m_HorizontalBearingY: 38.796875 + m_HorizontalAdvance: 16.671875 + m_GlyphRect: + m_X: 10 + m_Y: 186 + m_Width: 17 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 88 + m_Metrics: + m_Width: 25.5 + m_Height: 32.296875 + m_HorizontalBearingX: 3.890625 + m_HorizontalBearingY: 31.703125 + m_HorizontalAdvance: 33.375 + m_GlyphRect: + m_X: 119 + m_Y: 63 + m_Width: 27 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 89 + m_Metrics: + m_Width: 29.59375 + m_Height: 31.703125 + m_HorizontalBearingX: 0.203125 + m_HorizontalBearingY: 31.703125 + m_HorizontalAdvance: 30 + m_GlyphRect: + m_X: 56 + m_Y: 185 + m_Width: 30 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 90 + m_Metrics: + m_Width: 43.578125 + m_Height: 31.703125 + m_HorizontalBearingX: -0.09375 + m_HorizontalBearingY: 31.703125 + m_HorizontalAdvance: 43.328125 + m_GlyphRect: + m_X: 115 + m_Y: 115 + m_Width: 45 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 91 + m_Metrics: + m_Width: 28.6875 + m_Height: 31.703125 + m_HorizontalBearingX: 0.671875 + m_HorizontalBearingY: 31.703125 + m_HorizontalAdvance: 30 + m_GlyphRect: + m_X: 56 + m_Y: 134 + m_Width: 30 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 92 + m_Metrics: + m_Width: 29.75 + m_Height: 44.15625 + m_HorizontalBearingX: 0.140625 + m_HorizontalBearingY: 31.703125 + m_HorizontalAdvance: 30 + m_GlyphRect: + m_X: 298 + m_Y: 74 + m_Width: 30 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 93 + m_Metrics: + m_Width: 24.578125 + m_Height: 31.703125 + m_HorizontalBearingX: 2.4375 + m_HorizontalBearingY: 31.703125 + m_HorizontalAdvance: 30 + m_GlyphRect: + m_X: 353 + m_Y: 62 + m_Width: 26 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 10 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 51 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 54 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 56 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 58 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 60 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 66 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 68 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 69 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 70 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 71 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 72 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 73 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 74 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 75 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 76 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 77 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 78 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 79 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 80 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 81 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 82 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 83 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 84 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 85 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 86 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 87 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 88 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 89 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 90 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 91 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 92 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 93 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 704257233308556572} + m_AtlasTextureIndex: 0 + m_IsMultiAtlasTexturesEnabled: 0 + m_ClearDynamicDataOnBuild: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 55 + m_Height: 23 + - m_X: 55 + m_Y: 0 + m_Width: 54 + m_Height: 61 + - m_X: 0 + m_Y: 23 + m_Width: 45 + m_Height: 63 + - m_X: 109 + m_Y: 0 + m_Width: 48 + m_Height: 53 + - m_X: 157 + m_Y: 0 + m_Width: 47 + m_Height: 65 + - m_X: 109 + m_Y: 53 + m_Width: 46 + m_Height: 52 + - m_X: 45 + m_Y: 61 + m_Width: 25 + m_Height: 63 + - m_X: 204 + m_Y: 0 + m_Width: 46 + m_Height: 53 + - m_X: 250 + m_Y: 0 + m_Width: 46 + m_Height: 63 + - m_X: 296 + m_Y: 0 + m_Width: 47 + m_Height: 64 + - m_X: 70 + m_Y: 61 + m_Width: 35 + m_Height: 52 + - m_X: 204 + m_Y: 63 + m_Width: 48 + m_Height: 53 + - m_X: 105 + m_Y: 105 + m_Width: 64 + m_Height: 51 + - m_X: 0 + m_Y: 124 + m_Width: 46 + m_Height: 52 + - m_X: 252 + m_Y: 63 + m_Width: 36 + m_Height: 63 + - m_X: 46 + m_Y: 124 + m_Width: 49 + m_Height: 51 + - m_X: 169 + m_Y: 65 + m_Width: 31 + m_Height: 76 + - m_X: 343 + m_Y: 0 + m_Width: 63 + m_Height: 52 + - m_X: 200 + m_Y: 116 + m_Width: 47 + m_Height: 65 + - m_X: 95 + m_Y: 156 + m_Width: 46 + m_Height: 53 + - m_X: 46 + m_Y: 175 + m_Width: 49 + m_Height: 51 + - m_X: 0 + m_Y: 176 + m_Width: 36 + m_Height: 59 + - m_X: 169 + m_Y: 141 + m_Width: 25 + m_Height: 63 + - m_X: 406 + m_Y: 0 + m_Width: 51 + m_Height: 53 + - m_X: 343 + m_Y: 52 + m_Width: 45 + m_Height: 51 + - m_X: 288 + m_Y: 64 + m_Width: 49 + m_Height: 64 + - m_X: 457 + m_Y: 0 + m_Width: 47 + m_Height: 64 + - m_X: 388 + m_Y: 53 + m_Width: 47 + m_Height: 65 + - m_X: 504 + m_Y: 0 + m_Width: 61 + m_Height: 61 + - m_X: 565 + m_Y: 0 + m_Width: 52 + m_Height: 61 + - m_X: 141 + m_Y: 156 + m_Width: 26 + m_Height: 61 + - m_X: 337 + m_Y: 103 + m_Width: 50 + m_Height: 61 + - m_X: 247 + m_Y: 128 + m_Width: 59 + m_Height: 62 + - m_X: 617 + m_Y: 0 + m_Width: 54 + m_Height: 62 + - m_X: 194 + m_Y: 181 + m_Width: 53 + m_Height: 61 + - m_X: 95 + m_Y: 217 + m_Width: 76 + m_Height: 61 + - m_X: 36 + m_Y: 226 + m_Width: 57 + m_Height: 61 + - m_X: 504 + m_Y: 61 + m_Width: 55 + m_Height: 62 + - m_X: 559 + m_Y: 61 + m_Width: 54 + m_Height: 61 + - m_X: 435 + m_Y: 64 + m_Width: 54 + m_Height: 61 + - m_X: 0 + m_Y: 86 + m_Width: 25 + m_Height: 33 + m_FreeGlyphRects: + - m_X: 45 + m_Y: 23 + m_Width: 10 + m_Height: 38 + - m_X: 204 + m_Y: 53 + m_Width: 46 + m_Height: 10 + - m_X: 155 + m_Y: 53 + m_Width: 2 + m_Height: 52 + - m_X: 105 + m_Y: 61 + m_Width: 4 + m_Height: 44 + - m_X: 70 + m_Y: 113 + m_Width: 35 + m_Height: 11 + - m_X: 155 + m_Y: 65 + m_Width: 14 + m_Height: 40 + - m_X: 200 + m_Y: 65 + m_Width: 4 + m_Height: 51 + - m_X: 95 + m_Y: 113 + m_Width: 10 + m_Height: 43 + - m_X: 288 + m_Y: 63 + m_Width: 8 + m_Height: 1 + - m_X: 388 + m_Y: 52 + m_Width: 18 + m_Height: 1 + - m_X: 337 + m_Y: 64 + m_Width: 6 + m_Height: 39 + - m_X: 387 + m_Y: 103 + m_Width: 1 + m_Height: 920 + - m_X: 247 + m_Y: 116 + m_Width: 5 + m_Height: 12 + - m_X: 247 + m_Y: 126 + m_Width: 41 + m_Height: 2 + - m_X: 306 + m_Y: 164 + m_Width: 717 + m_Height: 859 + - m_X: 306 + m_Y: 128 + m_Width: 31 + m_Height: 895 + - m_X: 671 + m_Y: 0 + m_Width: 352 + m_Height: 1023 + - m_X: 194 + m_Y: 141 + m_Width: 6 + m_Height: 40 + - m_X: 247 + m_Y: 190 + m_Width: 776 + m_Height: 833 + - m_X: 95 + m_Y: 209 + m_Width: 46 + m_Height: 8 + - m_X: 167 + m_Y: 156 + m_Width: 2 + m_Height: 61 + - m_X: 171 + m_Y: 242 + m_Width: 852 + m_Height: 781 + - m_X: 167 + m_Y: 204 + m_Width: 27 + m_Height: 13 + - m_X: 171 + m_Y: 204 + m_Width: 23 + m_Height: 819 + - m_X: 36 + m_Y: 176 + m_Width: 10 + m_Height: 50 + - m_X: 0 + m_Y: 287 + m_Width: 1023 + m_Height: 736 + - m_X: 93 + m_Y: 278 + m_Width: 930 + m_Height: 745 + - m_X: 0 + m_Y: 235 + m_Width: 36 + m_Height: 788 + - m_X: 93 + m_Y: 226 + m_Width: 2 + m_Height: 797 + - m_X: 559 + m_Y: 122 + m_Width: 464 + m_Height: 901 + - m_X: 613 + m_Y: 62 + m_Width: 410 + m_Height: 961 + - m_X: 613 + m_Y: 61 + m_Width: 4 + m_Height: 962 + - m_X: 435 + m_Y: 53 + m_Width: 22 + m_Height: 11 + - m_X: 489 + m_Y: 64 + m_Width: 15 + m_Height: 959 + - m_X: 387 + m_Y: 125 + m_Width: 636 + m_Height: 898 + - m_X: 489 + m_Y: 123 + m_Width: 534 + m_Height: 900 + - m_X: 387 + m_Y: 118 + m_Width: 48 + m_Height: 905 + - m_X: 0 + m_Y: 119 + m_Width: 45 + m_Height: 5 + - m_X: 25 + m_Y: 86 + m_Width: 20 + m_Height: 38 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 1024 + m_AtlasHeight: 1024 + m_AtlasPadding: 9 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: + - m_FirstAdjustmentRecord: + m_GlyphIndex: 3 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.078125 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.078125 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 3 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -6.65625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 68 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -6.65625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 70 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -6.65625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 72 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -2.234375 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 76 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -6.65625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 82 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -2.234375 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 85 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -6.65625 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 86 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -2.234375 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 88 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -3.3125 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 90 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 55 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -3.3125 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 92 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + - m_FirstAdjustmentRecord: + m_GlyphIndex: 73 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: -1.078125 + m_YAdvance: 0 + m_SecondAdjustmentRecord: + m_GlyphIndex: 73 + m_GlyphValueRecord: + m_XPlacement: 0 + m_YPlacement: 0 + m_XAdvance: 0 + m_YAdvance: 0 + m_FeatureLookupFlags: 0 + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: d773920d064f540f18ab094416a6864d + pointSizeSamplingMode: 0 + pointSize: 60 + padding: 9 + packingMode: 0 + atlasWidth: 1024 + atlasHeight: 1024 + characterSetSelectionMode: 7 + characterSequence: + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!28 &704257233308556572 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LiberationSans Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 2 + m_Width: 1024 + m_Height: 1024 + m_CompleteImageSize: 1048576 + m_MipsStripped: 0 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IsPreProcessed: 0 + m_IgnoreMipmapLimit: 0 + m_MipmapLimitGroupName: + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_VTOnly: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + m_PlatformBlob: + image data: 1048576 + _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e10111212121212121212121212121212121212121212121212121212121212121212121207060401000000000000000000000000000000000000000000000000000002060a0c0c13131313130807050200000000000000000000000000000000000000000000000000000000000000000000000000010507080a0c0d0e0e0d0c0a08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c0c0c0c0c080806020000000000000000000000000000000000000000000000030607090b0d0e0e0d0c09070604000000000000000000000000000000000000000002080d101213131313130a0a080400000000000002060a0c0c13131313130f0605030000000000000000000000000000000000000606060606060000020608080b0d0e0e0d0b09060503000000000000000000000000000000000000000000060b0e1011131313130c0b0905010000000002070a0c0d13131313100f0d090500000000000306080913131313131306040000000000000000000000000000000000000000020507080b0d0d0e0d0c09070604000000000002050708090a09080706030000000000000000000000000000000000000000000000010507070b0c0d0e0d0c0907060400000101060606060000000000000000000000000000000000010507071313131312110f0c0701000000000205070813131313090907030000000004090e1112131313131307070401000000000000000000000000000105070713131313130d0c0a07020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070a0c0d0d0e0d0d0b0907070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b11171b1d1e1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1413100d07010000000000000000000000000000000000000000000000070d1216181920202020201414110e080200000000000000000000000000000000000000000000000000000000000000000104080d11141417191a1b1a1a19171514120e090501000000000000000000000000000000000000000000000000000000000000000000000000000000060d12161819191919191514120e090300000000000000000000000000000000000000060c10121316181a1a1a1a18161312100c070000000000000000000000000000000000060d14191c1f1f20202020171614100b05000000070d1216181920202020201c13120f0b060000000000000000000000000105070813131313131306090e121415181a1a1b1a181513120f0b060000000000000000000000000000000000040b12171b1d1e20202020181815110c060000070d1316191a202020201c1c1915100a0200040a0f13151620202020202013100c070100000000000000000000000000000002080e11141417191a1a1a18161312100c070002080e111414161716151312100b060000000000000000000000000000000000000002080d11131417191a1a1a18161312100c070d0e131313130c0c0906010000000000000000000002080d111314202020201f1e1b18130c050002080e111414202020201615130f0a0400080f151a1d1f20202020201413110d080100000000000000000002080d11131420202020201a1917130e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205080d11131416181a1a1b1a1918161413110d0805020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161d22272a2b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c20201d18120c040000000000000000000000000000000000000000010a12181e2225262d2d2d2d2d21201e19140d05000000000000000000000000000000000000000000000000000000000001070d1114191e2021242627272727262421201e1a14110d08020000000000000000000000000000000000000000000000000000000000000000000000010911181e2224252626262622211e1a150e0600000000000000000000000000000003090e11171c1f202225262727262523201f1c18120f0a04000000000000000000000000000810181f25292b2c2d2d2d2d2423201c171008010a11181e2225262d2d2d2d2d29201f1b17110a02000000000000000002080d11141420202020202013151a1e212225262727272522201f1b17110c070000000000000000000000000000050e161d23272a2b2d2d2d2d2524221d1811090a12191e2325262d2d2d2d292825211b140c060e151b1f21222d2d2d2d2d2d1f1c18120b03000000000000000000000000050b1014191e202124262727272523201f1c18120e0f14191e202123232322201f1c17110a02000000000000000000000000000000050b1013191d202124262727272523201f1c18121a1b20202020191816120d070000000000000000050c13191d20212d2d2d2d2b2b28241e170f050d14191e20212c2d2d2d23221f1b160f07121920262a2c2c2d2d2d2d2d201d19130c0400000000000000050c13191d20212d2d2d2d2d2626231f19120a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214191d202123252627272726252321201d1914120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1720272e333637383838383838383838383838383838383838383838383838383838383838383838382d2c29241d160d04000000000000000000000000000000000000000a131c232a2f323339393939392e2d2a251e170e05000000000000000000000000000000000000000000000000000000040c13181d20252a2d2e30323434343332302e2d2a25201e19130c060000000000000000000000000000000000000000000000000000000000000000000009131b23292e3132323232322f2e2b261f180f0600000000000000000000000001070c151a1c23282c2d2f3233343433322f2d2c28231c1b150c07010000000000000000000006101a222a303538393939393931302d28221a110a131c232a2e32333939393939362d2b27221b140b02000000000000050d14191e20212d2d2d2d2d2d1f1f262b2e2f3133343433322f2d2b27221b18120b030000000000000000000000040e1720282e3336373939393932312e29231b12131c242a2f3233393939393635322c261e16101820262b2e2f3939393939392c29231d150d0300000000000000000000060b161c1f252a2d2e313334343332302d2c28231c1a1b1e252a2d2e3030302f2d2b28231c140c0800000000000000000000000001080d161c1e252a2d2e313233343332302d2c28231c27282d2d2d2d2625221e18110a010000000000050e161e252a2d2e393939393837342f2921180e171f252a2d2e39393939302f2c272119101b242b3136383939393939392c29241e160d040000000000050e161e252a2d2e393939393933322f2a241c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000003090e141a1e21252a2d2e3032333434343332302e2d2924211e1a140e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202932393f4344454545454545454545454545454545454545454545454545454545454545454545453a39352f281f160c01000000000000000000000000000000000007121c252e353a3e3f46464646463b3936302920170d0200000000000000000000000000000000000000000000000000060d161d24292c3036393b3d3f404141403f3d3b3a36302d2a251e17110a030000000000000000000000000000000000000000000000000000000000000006111b252d343a3e3f3f3f3f3f3b3a37312a21180e0300000000000000000000030b12181f262b2e34383a3c3e404141403f3c3a38342e2b262018120b030000000000000000020d18222c343b414446464646463d3c39332c231a101c252e353a3e3f4646464646423937332d261d140a0000000000050e171e252a2d2e3939393939392c2c31373a3b3e404141403e3c3937332d28231d150c06000000000000000000000b16202932393f4344464646463f3d3a342d241b1c252e353b3f404646464643413d3830281e18222a32373b3c46464646464638342f271f150b0100000000000000020a111721272c3036393b3e404041403f3c3a38342e2b26272b3036393b3c3d3c3b3a38342e261e1a120800000000000000000000040c131921282c3036393a3e3f4041403f3c3a38342e3033343939393932312e2a231c130a00000000020c16202830363946464646464544403a332b211720293036393b464646463c3b38322b2319242d353d424546464646464639352f2820160c01000000020c162028303639464646464646403f3b352e261c12070000000000000000000000000000000000000000000000000000000000000000000000000000060b151a1f262b2d3036393a3d3f40404140403e3c3a3935302d2a251f1a150b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111d27323b444a4f51525252525252525252525252525252525252525252525252525252525252525252524745403931281d120700000000000000000000000000000000020d18232e373f464b4c53535353535346413b32291e14080000000000000000000000000000000000000000000000030a11171f282f35393b4146474a4c4d4e4d4d4c4a4846423b39363028231c150c040000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4847423c332a1f1509000000000000000000050d151d23293137383f4446494b4d4d4d4d4b4946444039373129241d150d040000000000000008141f2a343e464d5152535353534a49443e362c2219222e373f464b4c53535353534f46443f382f261b1106000000020d1720293036393b46464646464638383c4247484b4d4d4e4d4b4846443f38342e271e180f06000000000000000006121d28323b444b4f51535353534b4a453f372d23242e3740474b4d535353534f4e49423a3026202a343c43474953535353535345403931271d1207000000000000020b141b222733383b4146474a4c4d4d4d4b4946444039373132373b414647494a494846443f38302c241a10050000000000000000040d161e242933383a4146474a4c4d4d4d4b49464440393c4041464646463f3e3a352d251c110700000008131e28323a4146535353535352504c453d33291f29323b414647535353534948433d352b212b353f474e5253535353535345413a32281e130800000008131e28323a41465353535353534d4b4740382e24190e020000000000000000000000000000000000000000000000000000000000000000000000020a111720262b31373a3b414647494b4d4d4e4d4c4b494746413b3a36312b261f17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222e39444d555b5e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f53514b43392f24180d0100000000000000000000000000000006121e2a353f4951575960606060605f524c443b3025190e02000000000000000000000000000000000000000000030c151c2328313a4045474c525457595a5a5a5a595754524d4746413a342e261e160d040000000000000000000000000000000000000000000000000000000006121e29343f495156585959595955534d453c31261a0e0200000000000000050e161f272f343c42474a50535558595a5a59585653514a47433c352f271f160e040000000000000d1925303b4650585d5f60606060575550483e3328202b343f4951575960606060605c53504941382d22170b00000008141e29323b4146535353535353534544464e535558595a5a5a5855535049454039302a21180f06000000000000000b17232e39444d565b5e60606060585651493f34292a354049525759606060605c5a544c42382c26323c464e535560606060605f514b43392f23180c0000000000000a141d262d333d44484d525457595a5a5a585653514a47423c3d43474c52545656565553504a423e362c22170b00000000000000030d161f282f353e44484c525457595a5a5a585653514a46484c4e535353534c4a463f372d23180d0100010d1925303a444c525f606060605e5c574f453a2f25303b444d52545f60606056544f473d3227313d4751595e5f606060605f524c443a2f24190d0100010d1925303a444c525f60606060605957524a40352a1f130700000000000000000000000000000000000000000000000000000000000000000000030b141b222731373c4246484c52545658595a5a5a59585654524c4846423b373128221c140b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b27333f4a555f676a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b605d554b4035291d10040000000000000000000000000000000a16222f3a46515b63666c6c6c6c6c6c5e564c41362a1e11050000000000000000000000000000000000000000020b151e262e343e434b5153565e616365676767666563615e5754524c443f38302820160d030000000000000000000000000000000000000000000000000000000916222e3a46515b626565656565625f574d42372b1e1206000000000000030d162028313940454d53545c606265666767666562605c54534e454039312820160d040000000000101c2935414d5862696c6c6c6c6c64615a5044392d28323d46515b63666c6c6c6c6c69605b53493f33271b0f0300010d1925303b444c525f60606060605f515153575f6264666767666562605b53514b423c332a21180d030000000000020e1b27333f4b565f676a6c6c6c6c65625b51453a2e2f3b47525b63666c6c6c6c69665e54493d322b37434e585f626c6c6c6c6c6c5c554b4034291c10040000000006111b262f383f444f54565e6164666767666563605c54534d44464e54565e6163636362605c5450483e33281c10040000000000010b151f28313a41454f55565e6164656667666563605c545253585b60606060595751493f352a1e12060005111d2a36414c565e6c6c6c6c6c6b6861574c40342a36414d565e616c6c6c6c6360594f43382c36424e59636a6c6c6c6c6c6c5d564c4135291d11040005111d2a36414c565e6c6c6c6c6c6c66635c52473b2f23170a000000000000000000000000000000000000000000000000000000000000000000030c151d262d333c42474d5355565e61636566676767666563615d5654534d47423c332d261d160d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a36434f5b677177787878787878787878787878787878787878787878787878787878787878787878786d675d5145392c2013060000000000000000000000000000000c1825323e4b57636d72797979797976685e5246392d20140700000000000000000000000000000000000000000a141d2630383f4450555d6065686e70727374747372706e6966615e56504a423a32281f150b0100000000000000000000000000000000000000000000000000000b1824313e4a56626d72727272726e695f53473a2e2114080000000000010b151f28323a434b51575f62666d6f7173747473726f6d66625f58514b433a32281f160c0100000000121f2b3844515d69747979797979706c6155493c30303a444e58636d727979797979756c655b5044372b1f12050005111e2a36414c565e6c6c6c6c6c6c6c5c5c60656a6e7173747473716f6c65605c544d453c332a1f150b010000000004101d2a36434f5b67717779797979726d62564a3d31323f4b57636d73797979797670665a4e41352e3b47535f6a76797979797976675c5145382c1f1306000000000b17222d38414950596063686e7173737473726f6d66625f57504e586062686e6f706f6e6d66615a5044392d201408000000000007121d27313a434c52596163686d7172737473726f6d66615e5c64676c6c6c6c65635b51463a2e221609000713202d3946525e6876797979797873685c5044372d3946525e6875797979796f6b605448392f3845525e6a75797979797976685d5245392c201307000713202d3946525e68767979797979736e63574b3f3226190c0000000000000000000000000000000000000000000000000000000000000000030c151e272f383f444e53575f6166686d70727373747373716f6d6866615e57534d443f382f281f160d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a778385858585858585858585858585858585858585858585858585858585858585858585796d6053473a2d2014070000000000000000000000000000000c1926333f4c5966727f86868686867a6e6154473b2e2114080000000000000000000000000000000000000006111b262f38424a505a62676d72777a7d7f808180807f7d7b77736d68605c544c443a31271d120700000000000000000000000000000000000000000000000000000c1925323f4c5865727f7f7f7f7f7b6e6255483b2f221508000000000007121d27313a444c555c60696e74797c7e808080807e7c79746f6a605d554c443a31281d130700000000131f2c3946525f6c7986868686867d7064574a3d3135414c56606a727f868686868682796c605346392d201306000714202d3946525e687679797979797666666d72777b7e808081807e7c78726d665f574d453c31271d12070000000004111e2b3744515e6a7784868686867f7265584b3f3233404d59667380868686868276695c4f43362f3c4955626f7c8686868686796d6053473a2d201407000000030f1b27333f49535b606b70767a7e7f8080807e7c79746e69605b58606a6f767a7c7d7c7b79706c6155493c3023160a00000000000c18232f39434c565d606b70767a7d7f8080807e7c79746e69646e7479797979726d63574a3e3125180c000714212e3a4754616d7a8686868685786b5e5245382e3b4754616e7a878686867d6f63554b40353946535f6c7987868686867a6d6054473a2d211407000714212e3a4754616d7a8686868686807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000a151e273039414950575f62696e73777a7c7e808081807f7e7c7a77736e69625f57504a423a31281f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845525e6b788591929292929292929292929292929292929292929292929292929292929292929286796d6053473a2d2014070000000000000000000000000000000c1926333f4c5966727f8c939393877a6e6154473b2e211408000000000000000000000000000000000000000b17222d38414a545c606c71797f83878a8c8d8d8d8d8c8a8784807a736d665d564c43392f24180c0400000000000000000000000000000000000000000000000006131f2c3946525f6c79868c8c8c8a7d7164574a3e3124170b00000000000c18232f39434c565e676d747b8185888b8c8d8d8c8b8985817c746d675e564c433a2f24180d04000000131f2c3946525f6c79859293938a7d7064574a3d343c45525d686f7c8792939991847a6d655b5044372b1f1205000814212e3b4754616e7a8686868686796d6e787f84888b8c8d8d8d8b88847f796e695f574d43392f23180c0200000004111e2b3744515e6a77849193938b7e7265584b3f3233404d596673808c93938f8276695c4f43362f3c4955626f7c88939393867a6d6053473a2d20140700000005121f2b3744505b656c737d83878a8c8d8d8d8b8985817b736c665f6a6f7c838789898988867e7064574a3d3124170a0000000004101c2934404b555d686d757d83868a8c8d8d8d8b8985817b716c7480868686867f7265594c3f3226190c000714212e3a4754616d7a8793939185786b5e52453838434f5966727f8c99938e8174675d5145393946535f6c7986929393877a6d6054473a2d211407000714212e3a4754616d7a879393938c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000006111c263039434b535b606a6e757b808487898b8c8d8d8d8c8b898683807b756e69605b544b433a31271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2b3845525e6b7885919191919191919191919191919191919191919191919191919191919191919191867a6d6053473a2d2014070000000000000000000000000000000c1926333f4c5966727f8c999f94877a6e6154473b2e211408000000000000000000000000000000000000030f1b27333f49535c666d747e858b9095969899989899989695918c8680786d685d554b40352920150a00000000000000000000000000000000000000000000000106131f2c3946525f6c79859298978a7d7164574a3e3124170b0000000004101c2934404b555e686d7980878d929798999a9a999898928e8780796d685e554b40352920150a000000131f2c3946525f6c7985929f978a7d7064574a3d3c46515b606d7a8491999f92877d6f685e53493f33271b0f03000714202d3a4753606d7a869a9393877a6e7b838b919697979799999896918b837b6e695f554b4034291e130800000004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c88959f93867a6d6053473a2d201407000006131f2b37434e58606c7780898f9497999a98989898928e867f786d666f7c869095969696988b7e7164584b3e3125180b000000040e18222c3845515c676d7a818a8f929998999a999898928d857e7175828f93938b7e7265584b3f3225180c000714212e3a4754616d7a87949e9185786b5e5245383b4854606b7784919d9f92857a6d6053473b3146535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a87949f998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000c17232e38424b555c656c737b82878d90959698999a9a9a99989993908c87827b736c665d554b43392f23180c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a778385858585858585858585858585858585858585858585858585858585858585858584796d6053473a2d2014070000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000000020d17202b3744505b656d78818b92979d98928f8c8b8b8c8e91969d98928c837a6d675d51453c32261b0f0300000000000000000000000000000000020507080b0d0e0e131f2c3946525f6c7985929f978a7d7164574a3e3124170b000000020d17202c3845515c676d7a838d93999e98928f8e8e8f92979e9a938d837a6d675d51453c32261b0f000000131f2c3946525f6c7985929f978a7d7064574a3d434e58626d75818f969e948c7f726b60564c41382d22170b000006131f2c3845515c677986939f95887b7b849095918d8b8a8b8c90959e9e9590857b6e675c51453a3024190d01000004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d20140700000815212e3b47535f6a737f8c929c9e97928e8b8b8c8d9196928c81786d76828f989f97928c898a7e7164584b3e3125180b0000000a15202c38444f59606d79828e939c9f99928f8d8c8d8f929792877e76838f9c978b7e7164584b3e3125180b000714212e3a4754616d7a87949e9185786b5e524535404b55636f7c8996a0a2988b7e7164574d423646535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000003101c28343f4a545c676d777f878f939a9d9c9995949892989496999d9d99938f8780786d675d554b4034291e150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2936424f5b677177787878787878787878787878787878787878787878787878787878787878787878786d675d5145392c1f13060000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000008141e2b37424d57606c77818e939e98928c8682807e7e7f81848990959f959083796d60584e43372b1f1306000000000000000000000000000003090e12141518191a1b1a1f2c3946525f6c7985929f978a7d7164574a3e3124170b00000008141f2b37434e58606d798390959f98928b8682818182858a91969f959083796d60584e43372b1d12070000131f2c3946525f6c7985929f978a7d7064574a414b555f6a727f8b939e968f82776c60594f443a2f261b1106000004101c2934404b5f6c7986929f96897d8390918a84807f7d7e7f83899196a0979183796d60564c4135291d1104000004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d2014070004101c2834404b55626f7c87939f9e938e85817f7e7f8184898f938d80747a87939f9f92857f7d7e7c6e6255483b2f2215080000030f1b26313c4855616b75818e949e9c938e878381808082858a9292867b83909d978a7e7164574b3e3124180b000714212e3a4754616d7a87949e9185786b5e52453945515d6774818e9b9f9d9c8f8376695f53463846535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000040e19222c3844505c666d79818c92999f9c948f8c898786868687898c90959d9f99928c82796d675c51453e30261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26333e4a555f676a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b605d554b4035291d10040000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e21140800000000000000000000000000000000020e1925303a47535f69727f8c939e9792867f79757372727274787d838e939d958d80746a5f53473b2e211508000000000000000000000000050c11141a1e21212426272727252c3946525f6c7985929f978a7d7164574a3e3124170b0000020e1925303b4754606a73808d959f9691857e7a76747475797d8490959f958d80746a5f5447392e23180c0000131f2c3946525f6c7985929f978a7d7064574a45515d676f7c86929f9991847a6d655b50473d32281d140a000000000c18232f46525f6c7985929f9b8f828f91847d777472717173777d849197a0958c8073685d5245392c201308000004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d2014070006131f2c3845515c6775818e99a0958e817a7472717274777c828c928a7e7d8a9aa2978a7d7270716e6a5f53473a2e211408000006121f2b37434e5863707d8a939e9c928c817a7674737475797e85918f8283909d978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e52453a4753606d7a85929992919593877b6e6153493f46535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000a15202b37434e58606d78818f939f9d948f89837f7c7a79797a7a7c80838990959d9f948f82796d605a5042382e23170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222e39434d555b5d5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e53514b43392f24180c000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000005111e2a36414c56616e7b86929f9f92857c736d6766656566686b7079818e949e93877c6f6255493c2f2216090000000000000000000002080d171c1f252a2d2e313334343332303946525f6c7985929f978a7d7164574a3e3124170b000005111e2a36414d56626f7c87929f9991847b726d676867666d717a8390989f93877c6f62544b4034281c100400131f2c3946525f6c7985929f978a7d7064574a505a606d798491999f92877d6f685e53493f352b20160b0200000000071f2c3946525f6c7985929f9e938f91847b706c67656464666b707b85929f9f92857a6d6054473a2f24190d010004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000713202d3a4653606d7986929f9d9083786d67656565676a6f777f8792857f8c999f9285786c6364625f584e43372b1f120600000815212e3a47535f6a7683909d9f948c80756e68676667666d717a83918f87929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e5245424e5765717e8b98928784919a8c8073655b504446535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d05050505040300000000000000000000000000000000000000000000030f1b27323b4754606a73808d939e9d928d827c76726f6d6d676d6e7073777d838d929c9f948e81746c61544a3f34281c10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c27313b434a4f50525252525252525252525252525252525252525252525252525252525252525252524745403931271d1207000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000714202d3946525e6875818e999e93897d706a605d555858595960666d78828f918d8a8175685b4e4235281b0f020000000000000000040c131922282d31363a3b3e404141403f3d3a46525f6c7985929f978a7d7164574a3e3124170b00000714202d3946525e6875828f999f92877c6f69605d55545c60686e7b86929f9a8e8174665c5145382c1f130600131f2c3946525f6c7985929f978a7d7064574e58626c75818e969e948c7f726b60564c41382d23190e050000000006131f2c3946525f6c7985929fa69f93877c6f69615a585758596069717e8b96a1988b7f7265564c4135291d11040004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d20140700091623303c4956636f7c8998a3978a7e71665d5558595860656c727e8a9286929f9c908376655b5755534e463c31261a0f0200000915222f3c4855626f7c88959f9c9082776c615e5659545c60686e7b86929299a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e524547535f6a7683909c9083808d9a9184786c60534646535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a121212121111100d0a070704010000000000000000000000000000000006131f2b37434e58626f7c87929f9d938d80786f6a666261605c606163666b7078808d929c9d938a7d70665c5044382c1f130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151f2931393e4244454545454545454545454545454545454545454545454545454545454545454545453a39352f271f150b01000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000814212e3b4754616e7a86929f9b8e81756b6058514b4b4b4c4f545c666e7b8784817d796d6053473a2d2014070000000000000000040e161e242933393b4246484b4c4d4e4d4c494645525f6c7985929f978a7d7164574a3e3124170b00000814212e3b4754616e7b86929f9a8e81746a5f57514b4a50565e6973808d999b9286796d6053463a2d20130700131f2c3946525f6c7985929f978a7d706457555f6a717e8b939e968f82776c60594f443a2f261b1007000000000006131f2c3946525f6c7985929faa9b8e82756a6056504c4a4b4f57606d7984919e9c908376685d5245392c2013060004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000b1824313e4b5764717e8a97a399877a6d61544c4b4c4e535b606c73808d9299a39c8f82756953494847433c332a2015090000030f1c28333f4a5466737f8c99a1978a7d70655b524c4d4b51565f6973808d99a3ab978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e523f4a54626e7b8894998c807d899796897d7063564c41535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261f1f1f1f1f1e1d1c1a171413110d080200000000000000000000000000000815222e3b4754606a76828f99a0968e81746d666058565453515354565960666d73808d949f9e9184786d6053463a3024190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d171f272e333637383838383838383838383838383838383838383838383838383838383838383838382d2c29241d150d0300000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000c1925323f4c5865727f8b99a095887b6e62594f45403f3f3f424b545e696e7b7874706d675d5145392c20130600000000000000040d16202830353e45494d535457595a5a5a585653514b5f6c7985929f978a7d7164574a3e3124170b00000c1926333f4c5966727f8c99a096887b6e61584e45403f444d57626f7c888f8e8d897c6f6256493c2f23160900131f2c3946525f6c7985929f978a7d7064545d676f7c86929f9991847a6d655b50473d32281d140a00000000000006131f2c3946525f6c7985929fa298897d7063584e443f3e3e44505c6673808d9a9f92867a6d6054473a2d2114070004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000c1925323f4c5865727f8b989f928679685e52443e3f4149505a606d7884919dab9b8f8275685c4f423a37312a21180e03000006121f2b3844505b667683909c9e9285786c605349414040454d57616d7a86929fa4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e5244505c6673808d9a97897c7885929b8e8175685d5245535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d40332c2c2c2c2c2c2b2a29272421201d19130f0a040000000000000000000000000916222f3c4955626f7c88949f9d9184796d605c544e494746454747494f545c606d78828f9ca0968b7e7164564c4135291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d151c2226292a2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b201f1d18120b030000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e21140800000000000000000000000000000005121e2a36424d576975828f9c9d9083776a5f53473d3d3d3d3d3d424d575e696e696764605d554b4035291d1104000000000000010c161f28323a41455055575e6164666767666563605c555f6c7985929f978a7d7164574a3e3124170b0005121e2a36424d576976828f9c9d918477695f53463c35343b4653606d78828281807f7c6f6255483c2f22150900131f2c3946525f6c7985929f978a7d70665d606d798391989f92877d6f685e53493f352b20160b0200000000000006131f2c3946525f6c7985929f9f9285796d6053463c3231343f4a5463707d8a96a399897d706356493d3023160a0004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000b1825323e4b5865717e8b98a39986796d6053463a36383f44515c66717e8b99a39b8f8275685c4f42352b2620180f060000000613202d394653606c7985929f9b8e8275655b50413830343b46525e687683909ca4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e524653606d7985919e91857875818e9b92867a6d605447535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d403838383838383838373633302d2c29241e1b150c070100000000000000000004111d2935404b556773808d9aa2978b7e71675c514a423d3a3a383a3b3d424a505c666f7c89949f9c8f8276685d5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b11161a1d1d1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1413100c0701000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000714202d3a46525e697885929f9a8d807367584e4a4a4a4a4a4a4a4a4a4d575e615e575753514b433c342a20150a00000000000008131e28313a444c525a6164696e717374747372706d67615e6c7985929f978a7d7164574a3e3124170b000714212d3a46535e697885929e9a8d807467574d4234292b3844505c666d76757474736f6a5f53473a2e21150800131f2c3946525f6c7985929f9a8e81786d686c74818e959f948c7f726b60564c41382d23190e050000000000000006131f2c3946525f6c7985929f9c8f8376665c5145382b232e3a4754616d7a8798a2988c7f7265594c3f3226190c0004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000a1724313d4a5764707d8a97a894887b6e61564c46414140404a54606d7a86929f9b8f8275685c4f4235291a150e06000000000815222e3b4855616e7b8898a2988c7f726553493f2f262a36414c5666737f8c99a4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e524c5664707d8a979a8e8174707d8a97988b7e7165584e535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4545454545454545444443403d3a3935302b262018120b0300000000000000000613202c3945515d677784919d9f9285796d60554b4038302e2d2c2d2e30383f4a54606a76828f9c9f92867a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a0e101112121212121212121212121212121212121212121212121212121212121212121212070604000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000815212e3b4854616e7b8797a2978a7e71645756565656565656565656565656565656565655534e463c32261b0f0300000000010d19242f3a434c565d606c71767b7e7f8081807f7c79746e696c7985929f978a7d7164574a3e3124170b000815212e3b4854616e7b8797a1988b7e7265584b3f312528343f4a545c606968686766625f584e43372b1f120600131f2c3946525f6c7985929f9d938e827a6e717e8a939d968f82776c60594f443a2f261b1007000000000000000006131f2c3946525f6c7985929f9a8d817467544b403428202d3946525e687985929f9a8d8174675a4e4134271b0e0004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000815222f3b4855626e7b8896a0988b7f72685e56524c4d4d4c4c525d687783909d9b8f8275685c4f4235291c090300000000000a1623303d495663707d8996aa978a7d7164574a3e2d2425303e4a5764717d8a97a4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e52525e6875828f9b978a7d706d7985929d9083766a5f53535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073665952525252525252525251504f4d4a4745413a373129231d150d05000000000000000714202d3a4753606d7986939f9c8f8275675c5143392f2621201f2021262e38424e5865727f8c98a399897d7063564a3d3023170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000a1623303d495663707c8996a995897c6f6363636363636363636363636363636363636363625f584e43372b1f12060000000004111d2935414c555d686d757e83878a8c8d8d8d8b8985817b706c7985929f978a7d7164574a3e3124170b000a1623303d495663707c8996a996897c706356493d3023232e38424a50535c5c5b5a5955534e463c31261a0f0300131f2c3946525f6c7985929fa59d948f847b7b86929f9991847a6d655b50473d32281d140a00000000000000000006131f2c3946525f6c7985929f988c7f7265594c3f2e231e2a36414c566a7784919d9b8f8275685c4f4235291c0f0004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000814212e3a47535f697784919e9e91847a6d68615e565a59595958566875828f9b9b8f8275685c4f4235291c0f0200000000000b1824313e4b5764717e8a97a295897c6f6256493c2f23222f3c4855626f7b8895a2978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e5254616e7a86929e9285796d6774818d9a95887b6e62544a5f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073665f5f5f5f5f5f5f5f5f5f5e5d5c5a5754524c47433c342f271f170f050000000000000916232f3c4956626f7c899aa4998c7f7266554b4031271d14131314151c26303d4955626f7c8895aa998c7f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e1011131313130c0b090601000000000000060b0e1011131313130c0c0a06020000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000b1824313e4b5764717e8a97a195887b7070707070707070707070707070707070707070706f6a5f53473b2e211508000000030e18222c3945515d676d7a828a909597999a9a999898928e857e707885929e978a7d7164574a3e3124170b000a1724313d4a5764707d8a97a195887b6e6255483b2f221c2630383f44464f4f4e4d4c4847433c342a20150a0000131f2c3946525f6c7985929fa79f9d9691858491989f92877d6f685e53493f352b20160b0200000000000000000006131f2c3946525f6c7985929f988b7e7165584b3e322519253043505d6a7683909d9c908376695d5043362a1d100004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d2014070006121e2b37424d5766727f8c96a09690837a726d68686766666565656875828e9b9b8f8275685c4f4235291c0f0200000000000c1925323f4c5865727f8b98a194887b6e6155483b2e22212e3a4754616d7a8794a0978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e4f5965727f8c999a8d807366626f7c8995998d8073665c505f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c80736b6b6b6b6b6b6b6b6b6b6b6b6a696663605d56534e454039312921170d0400000000000a1724303d4a5763707d8a96ac978a7e7164574b3e2e24150b0706070a14202d3a4653606d798698a29a8d8174675a4e4134271b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b12171b1d1e20202020191816120d07000000040b11171a1d1e20202020191816120d0700000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000c1825323f4b5865727e8b98a4978a7e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7b6f6255483c2f2215090000000a15202c38444f59606d79838f949d9e99928f8d8c8d8f929892877e7885919e978a7d7164574a3e3124170b000b1825313e4b5864717e8b97a194877b6e6154483b2e21141e262e34383a43424141403c3a37312a22180e030000131f2c3946525f6c7985929f9f959095979291969f948c7f726b60564c41382d23190e050000000000000000000006131f2c3946525f6c7985929f978a7e7164574b3e31241d293643505c6976838f9c9d9083776a5d5044372a1d110004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d20140700020e1a26313c4653606d79849197a09590857f7a77757473727272727175818e9b9b8f8275685c4f4235291c0f0200000000000c1926333f4c5966727f8c99a194877b6e6154483b2e21202d3a4653606d798699a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e54606b7784919d95887c6f62606a7784919d9185796d60535f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8078787878787878787878787877777673706d68625f58514b433b332920160c01000000000b1824313e4b5764717e8a97a396897d7063564a3d3023170a00000006131f2c3845515c677985929f9b8e8175685b4e4235281b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161d23272a2b2d2d2d2d2525221e18110901050e161d22272a2a2d2d2d2d2625221e18120a010000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000c1925323f4c5865727f8b98a59a908a8989898989898989898989898989898989898989898275695c4f4236291c0f0000020f1a26313c4855606b75818e959e9c938e878381808082858b9292857b84919e978a7d7164574a3e3124170b000c1925323f4c5865727f8b98a094877a6d6154473a2e2114141c23282b2d36353534332f2e2b2620181006000000131f2c3946525f6c7985929f9d90838e939f9da0968f82776c60594f443a2f261b1107000000000000000000000006131f2c3946525f6c7985929f978a7d7064574a3d31241c2936424f5c6975828f9c9d9084776a5d5144372a1e110004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000009151f2c3845515c676f7c8590959e97928c86848280807f7f7f7e7e7e83909d9b8f8275685c4f4235291c0f0200000000000c1926333f4c5966727f8c99a094877a6d6154473a2e211f2c3845515c677986929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e55636f7c89959d9083766a5f5866727f8c99978a7d7063565f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a09f9286858585858585858585858585848382807d7a746f6a605c554d453b32281e1308000000000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000004101c2834404b556b7884919e9b8f8275685c4f4235291c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1720282e3336373939393932312e29231b13090e1720272e3336373939393933322f2a231c130a0000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000c1925323f4c5865727f8b98a5a29a9796969696969696969696969696969696969696968e8275685b4f4235281c0f000006121f2b37434e5863707d89939e9c928d817a7674737475797e85918f8284919d978a7d7164574a3e3124170b000c1825323f4b5865727e8b98a094877a6d6154473a2e2114181f262b2d2e34333231302d2c29241d150d03000000131f2c3946525f6c7985929f978a7e818e939e9e91847a6d655b50473d32291e150b02000000000000000000000006131f2c3946525f6c7985929f978a7e7164574b3e31241c2936434f5c6976828f9c9d9084776a5d5144372a1e110004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f43362f3c4955626f7c8895a093867a6d6053473a2d201407000004101c2834404b555f6a6f7c838c9196999993918f8d8c8c8c8b8b8b8b90959f9b8f8275685c4f4235291c0f0200000000000c1926333f4c5966727f8c99a094877a6d6154473a2e211f2b3844505b667985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e5d6774818e9a988b7e72655854616e7b86929b8e8275685e5f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0a2989292929292929292929292929291908f8d8a86817c746d675e574d443a2f24190d050000000b1825313e4b5864717e8b97a295897c6f6256493c2f231609000000000c18232e44515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202932393f4344464646463f3e3a342d251b1116202932393f4344464646463f3e3a352e251c120700000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000b1825313e4b5864717e8b97a4a09590909090909090909090909090909090909298a29b8e8175685b4e4235281b0f00000814212e3a47535f6a7683909c9f958d80756e68676667676d717b84918f86929f978a7d7164574a3e3124170b000b1824313e4b5764717e8a97a194877b6e6154483b2e2118212a31373a3b403f3e3d3c3a39352f271f150b010000131f2c3946525f6c7985929f978a7d78818f949e91847a6e685d554b433930271d140b020000000000000000000006131f2c3946525f6c7985929f988b7e7165584b3e32251d293643505c6976838f9c9d9083776a5d5044372a1d110004111e2b3744515e6a7784919d988b7e7265584b3f3233404d596673808c999c8f8276695c4f432e2f3c4955626f7c8895a093867a6d6053473a2d2014070000000c18232e39434e585f6a6f787f84898d8f91979495959696969697979c9fa69b8f8275685c4f4235291c0f0200000000000c1926323f4c5965727f8c98a194877b6e6154483b2e21202d394653606c798698a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5e606d7a85929f92867a6d6054525e6875828f9c92867a6d615f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0a69f9c99999999999999999999999a9a9c9c9999928e8880796e695e564c41352921160b0000000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000000071e2b3844515e6b7784919e9c8f8275695c4f4236291c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d28323b444b4f51535353534c4a463f372d23181d27323b444a4f51535353534c4b463f372e23180d02000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000a1724313d4a5764707d8a97a39d90838383838383838383838383838383838386929f9a8d8074675a4d4134271a0e00000815222f3b4855626e7b88949f9d9083786c615e5659555c60696f7c86929299a3978a7d7164574a3e3124170b000a1724303d4a5763707d8a96a195887b6e6255483b2f221f2a333c4246484d4c4b4a494745403931271d12070000131f2c3946525f6c7985929f978a7d70798290959690837a6d675d554b42392f261d140a0000000000000000000006131f2c3946525f6c7985929f988c7f7265594c3f32261c28343f4a546a7683909d9c908376695d5043362a1d100004111e2b3744515e6a7784919d998c7f7266594c3f2d33404d596673808c999d9083766a544a40342f3c4955626f7c8895a093867a6d6053473a2d20140700000007121d27303c464e585f666d72787c808285868788898989898a8a8a90949f9b8f8275685c4f4235291c0f0200000000000b1825323e4b5865717e8b98a195887b6e6255483b2f22212d3a4754606d7a8793aa978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5764717e8b989b8e8175685d524d5664717d8a97998b7f7265586c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a09f94908c8c8c8c8c8c8c8c8c8c8c8d8e8f92979b9f9b928d837b6e685d52453e33281c100300000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e39444d565b5e60606060585651493f34291e222e39444d555b5d60606060595751493f352a1e1206000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000091623303c4956636f7c8996a895897c7676767676767676767676767676767784919e988c7f7265594c3f3226190c00030f1c28333f4a5466737f8c99a2978a7d70665b524c4d4b51565f6a74808d9aa3ab978a7d7164574a3e3124170b00091623303c4956636f7c8996a896897c6f6356493c302326313c454d53555a5958575653514b43392f24180c0000131f2c3946525f6c7985929f978a7d706d7a839096959083796d675c544a42382f261b110600000000000000000006131f2c3946525f6c7985929f9a8d8074675a4d4132261f2c3844505c667884919e9b8f8275685c4f4235291c0f0004111e2b3744515e6a7784919d998d80736653493f3333404d596673808c999d918477665c5144382f3c4955626f7c8895aa93867a6d6053473a2d20140700000006111b262f383f444e545c60656c6f737578797a7b7c7c7c7d7d7d7d82909c9b8f8275685c4f4235291c0f0200000000000a1724313d4a5764707d8a97ac96897c6f6356493c3023222e3b4855616e7b8894a1978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b5f697683909c96897d7063564c4653606d7985929d9083776a5f6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a09c9082808080808080808080808080818285898f939f9d9590837a6d60594f44382c20150900000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b27333f4b565f676a6c6c6c6c65625b51463a2e2227333f4a555f676a6c6c6c6c66635b51463a2f22160a000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000714212e3a4754616d7a8796a0978a7d706a6a6a6a6a6a6a6a6a6a6a6a6a6d7986929f978a7d7064574a3d3124170a0006121f2b3844505b667683909c9e9285786c60544a414040454e58616e7b87939fa4978a7d7164574a3e3124170b000714212d3a4754606d7a8796a0978b7e7164584b3e30242b37424d575f616766656463605d554b4035291d100400131f2c3946525f6c7985929f978a7d70686e7b849197958f82796d665c544a41382d22171309000000000000000006131f2c3946525f6c7985929f9c8f827569584e43372b202d3a4653606d7986929f9a8d8174675a4e4134271b0e0004111e2b3744515e6a7784919d9c8f8275655b50443734404d5a6773808d9a9f9286796d6053463a2f3c4956636f7c8996a29886796d6053463a2d2013070000000b17222d38414950535758535b60636669666d6e6e6f6f7070707075828e9b9b8f8275685c4f4235291c0f0200000000000916222f3c4955626f7c889aa4978b7e7164584b3e2f2423303d4a5663707d8996a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b626e7b88949e9184786c60534645515c6674808d9a95887c6f626c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807373737373737373737373737476787c828a9298a0958f82766b6155483c31261a0f02000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a36434f5b67717779797979726d62564a3e31252a36434f5b67717779797979726d63574b3e3225180c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000713202d3946525d687784919e998c807366585d5d5d5d5d5d5d5d5d5d626f7b8899a196887b6e6155483b2e221508000613202d394653606c7985929f9b8f8275655b50423830343c46525e697783909da4978a7d7164574a3e3124170b000713202c3945525d687784919e998d807366564c41352b2d3a46535f696e737271706f6d675d5145392c1f130600131f2c3946525f6c7985929f978a7d7064696e7c859298948f82786d665b53493f3327251b12090000000000000006131f2c3946525f6c7985929f9e9185786a5f53473a2f292e3b4855616e7b8899a3988c7f7265594c3f3226190c0004111e2b3744515e6a7784919d9e9185786c6053463e373f4a546874818e9ba399887c6f62554b40373d4a5764707d8a979f928579665c5044382b1f12060000030f1b27333f49535b60646566676865625b5c60616262636363636875828f9b9b8f8275685c4f4235291c0f0200000000000714202d3a4753606d7a86939f998c807366554b4035292935404b5565727f8b98a4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b6673808d99998c7f73655b5044404b54626f7c88959a8d8074666c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073666666666666666666666767656c70757e86929f9f948a7d7063584e43372b1f1206000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784868686867f7265584c3f32252a3744515d6a7783868686867f7266594c3f3326190c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e21140800000000000000000000000000000005111d2935414c566875818e9b9c9083766a5f53505050505050504f5965727f8c989e918478695f53463a2d211407000815222e3b4855616e7b8898a2998c7f726653493f2f262a36424d576673808c99a4978a7d7164574a3e3124170b0004111d2935414c566875818e9b9c908376685d52463b37383d4855616e7b807f7e7d7c796d6053473a2d20140700131f2c3946525f6c7985929f978a7d70645f6a6f7d869299948e81786c655b504440372d241b120800000000000006131f2c3946525f6c7985929fa197887c6f62564c41393537414c5665717e8b98a399897d706356493d3023160a0004111e2b3744515e6a7784919da197897c6f63594f474244505c6676838f9cab998d8073675d514644424b5565727f8b989e9285786b5f4a3f34281c1003000005121f2b3744505b656c7072737475726d625653545556565656576976838f9c9b8e8174685b4e4135281b0e0200000000000613202c3945515d677784919d9c8f8276675d51453a33353b45515d6775828f9ca4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b6d7984919e93877b6e6153493f394754606a7783909d9285796d6c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073665959595959595959595a535b60636c707e8a949e9d9083776a5f53473a2e211408000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a77849193938b7f7265584c3f32252a3744515d6a77849093938c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000010d1924303e4a5764717d8a969f93877b6e625a5047434340454b55606b7683909d9a8e817467574d42362a1e1205000a1623303d495663707c8996aa978a7d7164574a3e2d2425303e4a5764717d8a97a4978a7d7164574a3e3124170b00010d19242f3e4b5764717e8a979f92867a6d61574d47434446505a65727f8b8c8b8a877a6d6154473a2e21140700131f2c3946525f6c7985929f978a7d706458606a707d87929f938e81776c605b52493f362d241a1108000000000006131f2c3946525f6c7985929fa9998c8073685d524b46414446525e6875818e9b9f92867a6d6054473a2d2114070004111e2b3744515e6a7784919da79b8f82756b6159534d5055606d7985929fa49e9184796d605b53504d535d6775818e9b9d9083766a5d50432e23170b0000000613202d394653606c777e7e7f81827f7265574d4748494949535f697884919e9a8d8073675a4d4034271a0d01000000000004101d2935404b556774818e9a9f9286796d60554b443f41464d57606d7a86929fa4978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786b707d8a979c8f8276695e52413837434e5865727f8c99978a7d716c7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4d4d4d4d4d4d4d4d4950535a616c75828f9ca095887b6e6255483b2f221508000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e211408000000000000000000000000000000000813202d3a4653606d7984919e9a8e81756c615a534e4e4b51555d676f7c89959f95897c706356493d31261a0e02000b1824313e4b5764717e8a97a295897c6f6256493c2f23222f3c4955626f7c8895a2978a7d7164574a3e3124170b00000813202d3a4653606d7985929e998c7f73695f57544e505359616c7783909998908377685e5246392d20130700131f2c3946525f6c7985929f978a7d70645758616b717e8b919c938d80746e635b51483f362c231a0e050000000006131f2c3946525f6c7985929fa99f92857a6d605c54524c50535b616e7a86929f9c908376675d5145392c2013060004111e2b3744515e6a7784919d9f95908a7d706b625f575c6067707d8a98a299938f8d80736d63605b575f626d7985929f9a8e8174675b4e4134281b0600000005121f2b3744505b6577848b8c8d8f8276695f55524c504d5359616e7b8896a1978b7e7164584b3e3125180b000000000000010d18242f3d4a5764707d8a97a2988b7e71675d5450494c52565e69727f8c98a3ab978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786875828f9b978a7e7164574d422f323c4754616d7a86929c8f8275687986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d40404040404040403f4446505a63707d8999a3988c7f7265594c3f3226190c000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99a194877a6e6154473b2e2114080000000000000000000000000000000006121f2c3844505c66737f8c969e938a7e716c625f585b555d60676d7983919d9d9083776b6054483b2f1f140900000c1925323f4c5865727f8b98a194887b6e6155483b2e22212e3a4754616d7a8794a0978a7d7164574a3e3124170b000006131f2c3845515c6774808d979f92857b6e69625f585b60626b717e8b95a0978b7e7265564c4135291d110500131f2c3946525f6c7985929f978a7d7064574f59626c727f8c929d928c80736d625a50483e352c20170d0200000006131f2c3946525f6c7985929fa197928e81746d66615e565b60636d74818e98a2978b7e7265554c4135291d11040004111e2b3744515e6a7784919d9d908390867d746e696a666d707983909d9f9387828f8b7f756f6c656a696e74808d97a2988b7e7165584b3e3225180b000000030f1b27333f49536774818e999a93877b6e67605d565c575f626b73808d9a9f94877b6e6154483b2e211508000000000000000713202d3a4653606d7985929e9e9184796d66605b53565d61686e7b85929299a3978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9185786d7a86929e9285796d6053463b302d3946525e6875828f9b92867b6e7986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d403333333333332d33373e4753606d7a86929f9b8e8175685b4e4235281b0f000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000000000000000030608090a0a0a0a0c1926333f4c5966727f8c99a194877a6e6154473b2e21140a0a0a0a0a07070501000000000000000003101c28343f4a54606d798491999f92867e756e6a696868676d7179828f959d93897d7063594f44382c200d0300000c1926333f4c5966727f8c99a194877b6e6154483b2e21202d3a4653606d798699a3978a7d7164574a3e3124170b000004101c2834404b55606d7a85919e9791847b736f6a6b666c6f747d86929f9e9185796d6053473a3025190d0100131f2c3946525f6c7985929f978a7d7064574a505a636d74808d939c928c7f726d625a50473e32291e140800000006131f2c3946525f6c7985929f9e9285928d8079716d686a656c70757f8b929d9f92857a6d6054473a2f24190d010005111e2b3844515e6b7784919e96897d859287807b787777797d839095a09c8f827a85928b827c797777787b818d929d9f92867a6d6054473a2d211407000000000b17222d3c4955626f7c88949e99908279716d686a696a696e747d87929f9c908376695e52463a2d2014070000000000000006131f2c3845515c6773808c97a0968f81786f6c656868686d727a83918687929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949e918578727f8c999a8d8074665c514538292a36414c5664707d8a97998c7f727986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033262626262622272c3845515d677784919e9c8f8376695c504336291d10000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000000000000040a0f13151617171717171926333f4c5966727f8c99a194877a6e6154473b2e211717171717171413110d0802000000000000000c17232e3845515d676f7c87929a989288817b77757475767a7e848f949e948e81746b6155473d32271b100000000c1926333f4c5966727f8c99a094877a6d6154473a2e211f2c3845515c677986929f978a7d7164574a3e3124170b0000000c18232e3945525d68707e8a929f969186807c797878797c818792989f928a7d70675c514538281e13080000131f2c3946525f6c7985929f978a7d7064574a48515b606c77818e949b918b7f716c61594f443b3025190e02000006131f2c3946525f6c7985929f988b7f88938d837e7a787777797c828b919b9f948c7f72675d5145392c1e1308000005121e2b3845515e6b7884919e94887b7e8a928d8885838485899095a09d93897d717e8a918f8985848485888e939da0968d8074685d5245392c201307000000000615222e3b4754606a75828f969f9590847e7a78767677787b808792999d92897d7063574d42362a1e12050000000000000004101c2834404b55606d7a8591999e938f837c78767475777a7f85918e8185919e978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9184787783909d95887c6f62544b40342825303a4653606d7985929d9184777986929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033261a1a1a1a171d2935404b556a7683909d9d9084776a5d5144372a1e11000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000000000070e151b1f212224242424242426333f4c5966727f8c99a194877a6e6154473b2e2424242424242421201d19130c0500000000000006111c2935404b55606a717e8892989a938e888482818283868b91969e938f82796d60594f44352b21160b0000000c1926333f4c5966727f8c99a094877a6d6154473a2e211f2b3844505c667985929f978a7d7164574a3e3124170b00000007121d2935414c56616c73808c939a98928d8886858485888d929999938c80736b61554b403429160c020000131f2c3946525f6c7985929f978a7d7064574a3f44505b656d78828f959c93877e716b61564c41362a1e1105000006131f2c3946525f6c7985929f96897d808d93918b8685848485898f939b9f958f82786d60554b4135291d0c01000005121f2b3845525e6b7885919c94877a73808c929791909192989d9f9b938e81746c727f8a929792919092979b9f9c9590847a6d60564c4135291d11040000000006131f2b37434e58616d7a8491959f96918b868483838385888d92999e938d80746b6054453b30251a0e0200000000000000000c18232e3945525d68707d8793999e9590898482818283868b9291847a85929e978a7d7164574a3e3124170b000714212e3a4754616d7a87949e9184777b88959d9083776a5f5342392e231f2c3844515c6674808d9a95887c7985929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d4033262222222323232b37424d576a7784909d9d9083776a5d5044372a1d11000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000000007101820262b2e2f30303030303030333f4c5966727f8c99a194877a6e6154473b30303030303030302e2d2a251e170e050000000000000c18242f39434e58626c717e868e93999b96918f8e8f9092999b96918b81796d675d51473d3323190f040000000c1926323f4c5965727f8c98a194877b6e6154483b2e21202d3a4653606d798698a3978a7d7164574a3e3124170b000000000d1924303a44505a636e737f8890959b999992919192989a9b9590877f736e63594f43392f231804000000131f2c3946525f6c7985929f978a7d7064574a3d3f49535c666d79838e8f8f8f877d70685e5246392d201407000006131f2c3946525f6c7985929f968a7d78818c92999391909192989b9e99938d83796d665c51433a2f24180d00000005121f2c3845525f6b78858f8f8f867a6d737f878d919795969698928f8981786d606d727e858c90959596969992908b837b6e675d51443a2f24190d0100000000030f1b27323c46525e686e7b838c92989c9a9391908f9092979a9b97918a81786c60594f4433291f140900000000000000000007121d2935414c56616b717e8791969c9d96918f8e8f90929490857c7885929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949d9184777f8c99988b7e7265584e4330271d1c2834404a54626f7c8895998d807885929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d40332f2f2f2f2f302e343a47535f697885929e9c8f8276695c4f4336291c10000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000000040e18222a32373b3c3d3d3d3d3d3d3d3d3f4c5966727f8c99a194877a6e6154473d3d3d3d3d3d3d3d3d3a3936302920170c02000000000007121d27313d46505a626c717b81878c9092999696969597918e8a847e756d675d554b40352c211107000000000b1825323e4b5865717e8b98a195887b6e6255483b2f22212d3a4754606d7a8793aa978a7d7164574a3e3124170b0000000008131e28323e48525c636d737d83898e91969596969596918e89837c726d635c52473e31271d1207000000131f2c3946525f6c7985929f978a7d7064574a3d38414b545d676d7a8282828282817a6e6154473b2e211408000006131f2c3946525f6c7985929f968a7d707880878d91959596969596918d8780796d675d544a4031281d1307000000020f1c2935424f5c6875818282828275676d727b8185878989898885827d746d665c636c717a7f84878889898886837e786e695e554c4132281e13080000000000000a15202a36414c565f696e7980868b8f9196959596969596918f8a857e746c665b50473d3221170d03000000000000000000000d19242f3a434f59626c717d848b90929996969597928e89827b6f7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949d90847783909d92867a6d6054473c32211518232e3947535f6a7783909d91847885929e93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d403c3c3c3c3c3c3d3d40454d56626e7b8897a19b8e8174685b4e4135281b0e000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000000a15202a343c4347494a4a4a4a4a4a4a4a4a4c5966727f8c99a194877a6e61544a4a4a4a4a4a4a4a4a4a4746413a32291e13080000000000010b151f2b343f48505a61696e757b80838688898989888785827e79716c605d554b43392f231a1000000000000a1724313d4a5764707d8a97ac96897c6f6356493c3023222e3b4855616e7b8894a1978a7d7164574a3e3124170b00000000020c16202c36404a525b636b6f787d818487888989888784817d786f6a635b524a40352c1f150b01000000131f2c3946525f6c7985929f978a7d7064574a3d2f39424b555e686d7575757575756e685e5246392d201407000006131f2c3946525f6c7985929f978a7d706d737b808486888989888784807c746d675d554c42392e1f160c01000000020e1b2834414d59656f75757575756f6563696e74787b7c7d7c7b7975706b605c545a61686d73777a7c7c7c7b7a76716d665e564d433a2f20160c01000000000000040d1925303a444d575f676d737a7e82848788898989888784827e79716c605b544a3f352b210f05000000000000000000000008131e28313d47505a626b70797e8386888989898785817d766e697985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949d90837b88959b8e8175685d5245392c2013121c2b37434e5865727f8b9996887b85919e93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366594d49494949494949494a4b51565e69737f8c99a49a8b7e7164584b3e3125180b000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000000030f1b26323c464e5355575757575757575757575966727f8c99a194877a6e61575757575757575757575754524c443a3025190d010000000000030d19222d363f4850575e61696e7376797b7c7d7c7c7a7875716d66625a514b433a31271d110800000000000916222f3c4955626f7c889aa4978b7e7164584b3e2f2424303d4a5763707d8a96a3978a7d7164574a3e3124170b0000000000040e1a242e384049515960656c7074787a7c7c7c7b7a7875706c656058514940372e231a0d0300000000131f2c3946525f6c7985929f978a7d7064574a3d31303a434c565e61686969696968615e564c41362a1e1105000006131f2c3946525f6c7985929f978a7d7064696e73777a7c7c7c7b7a77736f6a605d554c433a30271c0d0400000000000c1925313d49545d656869696969655d575f6167696e6f706f6e6c66636059514b50565d6166686d6f706f6e6d6764605c544d443b31281e0d04000000000000000008131e28323b454d555d60686d7175787a7b7c7c7c7b7a7875716d66615a504a42382d23190f000000000000000000000000010c161f2c353f48505960676d7276797b7c7c7c7b7875706b616c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949c90837f8c9896897d7063564c4135291d110f1b26323c4754616d7a8692998c7f84919e93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c8073665955555555555555565657555c60686e7b85929f9f93877a6d6154473a2e211407000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000000006131f2b37434e585f62636363636363636363636366727f8c99a194877a6e636363636363636363636363615e564c41362a1d110500000000000007101b242d363e454d53575f6166666d6e6f70706f6d686864605c545045403a31281f150b0000000000000714202d3a4753606d7a86939f998c807366554b4035292a35414c5665727f8c98a4978a7d7164574a3e3124170b00000000000008111c262e3740474f535b606368686d6f70706f6e686863605b534e4640372e251c11080000000000131f2c3946525f6c7985929f978a7d7064574a3d3128313a444c52545b5c5c5c5c5b54524c443b3025190e02000006131f2c3946525f6c7985929f978a7d70645e6166676d6f70706e6d6867625f58514b433a31281e150b0000000000000915212c37424b54595c5c5c5c5c5a544d5355575e6162636361605b54544f4540444c5254565d6062636362605d5553504a423b32291f160c000000000000000000020c162029333b434b51565d616569686d6f6f706f6f6d686864605c5450443f382f261c110700000000000000000000000000040d1a232d363f474f555c6065676d6f70706f6e69686360596c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949c8f82828f9c9184786c6053463a2f24190d0a15202d3946525e6875828f9b908283909d93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c807366626262626262626262636465676d717a839098a2998f8275685e5246392d201307000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000815212e3b47535f6a6f707070707070707070707070727f8c99a194877a707070707070707070707070706d685e5246392d2013070000000000000009121b242c333b42464d5355545c606163636362615e565753514b423e352f281f160d030000000000000613202c3945515d677784919d9c8f8376675d51453a33363b45525d6876828f9ca4978a7d7164574a3e3124170b000000000000000a141c252e353d4149505356565e6162636362615e5656535049413d342e251c130a000000000000131f2c3946525f6c7985929f978a7d7064574a3d312429323a4146474f4f4f4f4f4f4746413b32291e140800000006131f2c3946525f6c7985929f978a7d70645754555d6062636362605d5655534e45413a31281f160c0300000000000004101b26303942494d4f4f4f4f4f4d494246484d52545656565553504a48443d343a4146474c52545556565553514b46443f38302920170d0400000000000000000000050e172129313a41454c525458565d606262636362615e565753514b423e332d261d140a00000000000000000000000000000008111b242d353d434b5153555c6062636362615e5756545f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949d908387929a8c7f73655b504437281e130805111d2a36414c5664707d8a97928783909d93877a6d6054473a2d211407000714212e3a4754616d7a8794a0998c80736f6f6f6f6f6f6f6f6f6f70707275797e859095a09f92877b6e61564c41362a1e1105000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000916222f3c4955626f7c7d7d7d7d7d7d7d7d7d7d7d7d7d818e9ba4978a7e7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6154473a2e211407000000000000000009121a212931363c4247484b5153555656565554524c4a464540393029241d160d040000000000000004101d2935404b556774818e9a9f92867a6d60554b443f41464d57606d7a86929fa4978a7d7164574a3e3124170b00000000000000020a131c232b2f383f44464a4c52545556565554524c4a46443f382f2b221c130a01000000000000131f2c3946525f6c7985929f978a7d7064574a3d312420293036393a4242424242423b3936302920170d0200000006131f2c3946525f6c7985929f978a7d7064574a4b51535556565554524c4947433c352f281f160d04000000000000000009141e2730373d414242424242413d373a3b424647494a494846443f383832283035393a414547494949484745403a38342e261e170e05000000000000000000000000060f171f282f353a4146474b4c5254555656565554524c4b464540393028221c140b020000000000000000000000000000000009121b232b31394045474b51535556565654524d4a525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a87949f9286929993877b6e6153493f3327160c01010d1925303a4653606d798591999286929f93877a6d6054473a2d211407000714212e3a4754616d7a8794a09a8e817c7c7c7c7c7c7c7c7c7c7c7c7d7f81858b9297a09f928c7f72695f53443a3025190d01000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000f1c2835424f5b6875818a8a8a8a8a8a8a8a8a8a8a8a8a8e939da69a908a8a8a8a8a8a8a8a8a8a8a8a8a897d7063564a3d3023170a000000000000000000080f171f252a31373a3b40454648494a49494746413e3a38342e271e18130c040000000000000000010d18242f3d4a5764707d8a97a2988b7e72675d5450494c52575f6973808c99a3ab978a7d7164574a3e3124170b0000000000000000010a11191d262d3337393d414647494949484746413d3937332d261d19100a0100000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124171e252a2d2e3536363636352e2d2a251e170e050000000006131f2c3946525f6c7985929f978a7d7064574a404547494949484745413c3b373229241d160d04000000000000000000020c151e262c3134353636363634312b2d30363a3b3c3d3c3b3938332d2c272124292d2f35393a3c3d3c3b3a38352f2b28231c140c050000000000000000000000000000060d161d24293035393a3e41454748494949484746413e3a38342e271e17110a0200000000000000000000000000000000000009111a1f272f34383a4045474849494947464246525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a39992999c8f8276695e5341382d221704000008131f2c3844505c6673808d9a999299a393877a6d6054473a2d211407000714212e3a4754616d7a8794a09d938e8888888888888888888889898a8c8e92979e9f98928b80736d63574d4232291e130800000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000f1c2835424f5b6875828e9696969696969696969696969b9da5a3a29a97969696969696969696969696897d7063564a3d3023170a00000000000000000000050d141a1f262b2d2e34383a3b3c3d3d3c3a3936302d2c28231d150c0701000000000000000000000713202d3a4653606d7985929e9e9184796d66605b53565e61696e7b86929299a3978a7d7164574a3e3124170b00000000000000000000070b141b22272b2d3035393a3c3d3d3c3b3936302d2b27221b140b07000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d31241713191e202128292929292821201e19140d05000000000006131f2c3946525f6c7985929f978a7d7064574a3d393a3c3d3d3b3a3935302e2b262018130c040000000000000000000000030c141b212528292929292928251e21252a2d2e2f30302e2d2b28221c1c16191d2024292c2d2f30302f2d2c29241f1c17110a0200000000000000000000000000000000040c13181e24292d2e2f35393a3c3c3d3c3c3a3936302d2c28231d150c06000000000000000000000000000000000000000000080d151d23292c2f34383a3c3d3d3c3b3a3646525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0a39fa2978a7e7164574d422f261b1106000003101c28343f4a54626f7c88959f9fa3a093877a6d6054473a2d211407000714212e3a4754616d7a8794a0a59d9a95959595959595959595959697989b9e9b98928e867e736e635b51453c3120170d0200000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000f1c2835424f5b6875828e96969696969696969696969696969696969696969696969696969696969696897d7063564a3d3023170a000000000000000000000003090e151a1e2123282c2d2e3030302f2e2d2a25201f1c18120b0300000000000000000000000006131f2c3845515c6773808c97a0968f81786f6c656868686d727b84918687929f978a7d7164574a3e3124170b0000000000000000000000020a11171b1f2025292d2e2f30302f2e2d2a25201f1b17110a0200000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d312417080d1113141c1c1c1c1c1c1414110e080200000000000006131f2c3946525f6c7985929f978a7d7064574a3d312d2f30302f2d2c2924211f1b150d07010000000000000000000000000002091015191b1c1c1c1c1c1b1912141a1e202123232322201f1c1711100b0d1113191d202122232322201f1d1812100b060000000000000000000000000000000000000001070d13191d202124292c2d2f2f30302f2e2d2a25201f1c18120b030000000000000000000000000000000000000000000000030b12181c1f23292c2d2f30302f2e2d3946525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794969696969285796d6053473b3120140a000000000c17232e3847535f6a7783909696969693877a6d6054473a2d211407000714212e3a4754616d7a879496969696969696969696969696969696959496918e8b86817b716d635c52493f332a1f0e050000000b1825313e4b5864717e8b97a295897c6f6256493c2f23160900000005111e2b3844515e6b7784919e9c8f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000f1c2835424f5b6875818989898989898989898989898989898989898989898989898989898989898989897d7063564a3d3023170a0000000000000000000000000003090e1214181c1f20222323232221201d191313100c07000000000000000000000000000004101c2834404b55606d7a8591999e938f837c78767475777a7f86918e8184919e978a7e7164574b3e3124180b00000000000000000000000000060b0f1213191d20212223232221201e1913120f0b06000000000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a010507070f0f0f0f0f0f08070502000000000000000006131f2c3946525f6c7985929f978a7d7064574a3d31242223232221201d1915130f0a04000000000000000000000000000000000004090c0e0f0f0f0f0f0f0c05090e1114141617161513120f0b0600000105080d111314161616151413100c0703000000000000000000000000000000000000000000000002080d111314191d2021222323232221201e191313100c07000000000000000000000000000000000000000000000000000001070c1013181c1f2022232323212c3946525f6c7985929f978a7d7164574a3e3124170b000714212e3a4754616d7a878989898989898074675c5145382c1f13020000000006111c2b37434e5865727f898989898989877a6d6054473a2d211407000714212e3a4754616d7a87898989898989898989898989898989898988888784827f7a746e69625a524a40372d21180e000000000b1825313e4b5864717e8b969695897c6f6256493c2f23160900000005111e2b3844515e6b77849196968f8275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000915222f3c4855626f7c7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6154473a2e2114070000000000000000000000000000000206070c10131315161716161413110d08060400000000000000000000000000000000000c18232e3945525d68707d8793999e9590898482818283868c9291847a84919d978b7e7164584b3e3125180b0000000000000000000000000000000305080d111314161616151414110e0805030000000000000000000000000000131f2c3946525f6c79859299978a7d7064574a3d3124170a0000000002030303030200000000000000000000000006131f2c3946525f6c7985929f978a7d7064574a3d3124171616151413110d080603000000000000000000000000000000000000000000000202030303030200000002050708090a09080606030000000000000001040607090a090807060400000000000000000000000000000000000000000000000000000000010507080d11131415161616151413110d0806040000000000000000000000000000000000000000000000000000000000000004070c101314151616161f2c3946525f6c7985929f978a7d7164574a3e3124170b000713202d3a4653606d787d7d7d7d7d7d7d7a6e61554b4034291c100400000000000f1b26313c4753606d797d7d7d7d7d7d7d786d6053463a2d201307000713202d3a4653606d787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c7c7b7a7875726d68615e57504840382e251c0f06000000000b1825313e4b5864717e89898989897c6f6256493c2f23160900000005111e2b3844515e6b7784898989898275695c4f4236291c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d998c7f7366594c402e232a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000000000815212e3b47535f6a6f7070707070707070707070707070707070707070707070707070707070707070706d685e5246392d2013070000000000000000000000000000000000000004060708090a0a0907070501000000000000000000000000000000000000000007121d2935414c56616b717e8791969c9d96918f8e8f9092948f847c7783909d988b7e7165584b3e3225180b00000000000000000000000000000000000001050707090a0a09080705020000000000000000000000000000000000131f2c3946525f6c79868c8c8c8a7d7064574a3d3124170a0000000000000000000000000000000000000000000006131f2c3946525f6c79859299978a7d7064574a3d3124170a0a08070704010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104070709090a09090707050100000000000000000000000000000000000000000000000000000000000000000000000000040607090a0a131f2c3946525f6c79859299978a7d7164574a3e3124170b0006121f2c3844515c666d707070707070706e685e5243392f23180c0000000000000a15202c3945515d676d707070707070706d665c5044382c1f12060006121f2c3844515c666d7070707070707070707070707070707070706f6e6d686865615d56534d453f362e261c130a00000000000814212e3b4754616e7b7d7d7d7d7d7a6d6054473a2d21140700000000091623303c4956636f7d7d7d7d7d7c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d9a8d807467554b4034282b3744515e6a7784919d998c7f7266594c3f3326190c000000000000000000000006121f2b37434e585f62636363636363636363636363636363636363636363636363636363636363636363615e564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d19242f3a434f59626c717d848b90929996969597928e89827b6e76838f94948b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7b6e6255483b2f2215080000000000000000000000000000000000000000000006131f2c3946525f6c79868c8c8c8a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000003070b0d0e131313131313131313131313131313131313131313131313130603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3946525f6c79868c8c8c8a7d7164574a3e3124170b0004101c2834404a545c6063636363636363615e564c4131271d120700000000000004111d2935404b555d6063636363636363605c544a3f34281c10030004101c2834404a545c606363636363636363636363636363636363636261605d565854524c46423b332d241c140a0100000000000714202d3a46525e696e70707070706d685d5245392c201306000000000915222f3b4854606b6f707070706f6a5f54473b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d9c8f8376675c5145392f2935414c566b7784919e988c7f7265594c3f3226190c0000000000000000000000030f1b26323c464e535556565656565656565656565656565656565656565656565656565656565656565654524c443a3025190d010000000000000000000000000000030607090c0d0e0e0d0b0808060200000102060606060000000000000000000000000000000008131e28313d47505a626b70797e8386888989898785827d766e697581878787877f7266594c3f3326190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825313e4a57636d72737373736e695f53473a2e21140800000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7b6e6255483b2f2215080000000000000000000000000000000000000000000000000001080e13171a1a2020202020202020202020202020202020202020202020202012100c0600000000000000000000000000000000000000000000030506080a0b0c0c0b0a08060503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7c6e6255483b2f22150800000c18232e39424a51535656565656565654524c443b301f150b01000000000000010d18242f3a434b51535656565656565653504a42382e23170c0000000c18232e39424a5153565656565656565656565656565656565656555554524c4c4746413a363129211b120a0200000000000005111e2a36424d575e616363636363605d564c4135291d11040000000007131f2c38444f59606363636363625f584e43372b1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d9f9285796d60554b4039353946525d687885929f988b7e7165584b3e3225180b0000000000000000000000000a15202a343c4347484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4746413a32281e130800000000000000000000000000060b10121316181a1a1a1a181514120f090c0e0f131313130b0a0805000000000000000000000000010c161f2c353f48505960676d7276797b7c7c7c7b7875706b61606d7a7b7b7b7b7a6d6054473a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222e3a46515b636666666666625f574d42372b1e120600000000000000000000000000000000000000000000000c1825313e4a57636d72737373736e695f53473a2e211408000000000000000000000000000000000000000000000000020b12191f2326272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d1f1c17110a03000000000000000000000000000000000003060b0f1213151718191918171513120f0b0603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825313e4a57636d72737373736e6a5f53473a2e211408000007121c2730394044464a4a4a4a4a4a4a4746413b32291e0d03000000000000000007131d28313a4045474a4a4a4a4a4a4a46443f3830261c110600000007121c2730394044464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4949484745413f3a3935302a251f170f090000000000000000020e1a25303b454d5254565656565654524c433a2f24190d0100000000030f1b27323d474f54565656565655544e463c32261b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919da2988b7e71675d514b4641424754616d7a8798a2978a7e7164574a3e3124170b000000000000000000000000040e18222a32373b3c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a3936302820160c020000000000000000000002080d11171c1f202225262727262522211f1a15181a1b20202020171714110c050000000000000000000000040d1a232d363f474f555c6065676d6f70706f6e69686360595d686d6e6e6e6e6d675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f495157595959595955534d453c31261a0e0200000000000000000000000000000000000000000000000916222e3a46515b636666666666625f574d42372b1e12060000000000000000000000000000000000000000000000010b141d242b303334393939393939393939393939393939393939393939393939392c28231c150c030000000000000000000000000000060b0f12171b1f202224252525242422201f1b17120f0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222e3a46515b636666666666625f574e42372b1e12060000000b151e272e34383a3d3d3d3d3d3d3d3b3936302920170d000000000000000000010c161f282f35393a3d3d3d3d3d3d3d3a38342e261e150a00000000000b151e272e34383a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3b3a3935302e2d29241e1a140d050000000000000000000009141f29333b4246474a4a4a4a4a4745413a31281e13080000000000000a16212b353d4448494a4a4a4a4947433c342a20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919da79d9184796d605c54524c4d535a63707d8a96a399887c6f6255493c2f2216090000000000000000000000000006101820262b2e2f3030303030303030303030303030303030303030303030303030303030303030302e2d2a251e160e0500000000000000000000040c13191c23282b2d2f3233343433312f2e2b261f2427282d2d2d2d2423211c171008000000000000000000000008111b242d353d434b5153555c6062636362615e5756554f565d6061616161605d554c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4847423c332a1f150900000000000000000000000000000000000000000000000006121e2a353f495157595959595955534d453c31261a0e02000000000000000000000000000000000000000000000008121d262f363c3f414646464646464646464646464646464646464646464646464638342e261e150a000000000000000000000000020a11171b1f22272b2d2e3031323231302f2d2b27221f1c17110a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2a353f495157595959595955534e453c31261a0e02000000030c151c23282c2d303030303030302e2d2a251e170e0500000000000000000000040d161d24292c2d303030303030302d2c28231c150c030000000000030c151c23282c2d3030303030303030303030303030303030302f2e2d2c292421201d19130e09030000000000000000000000020d17202930363a3b3d3d3d3d3d3a39352f281f160c01000000000000040f19232b32383b3c3d3d3d3d3c3b37322a22190e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919da095908d80746d66615d56575f626c75828f9c9f9286796d6053463a2d2013070000000000000000000000000000060e151b1f212223232323232323232323232323232323232323232323232323232323232323232321201d19130c0500000000000000000000070e161e25292e34383a3c3f404141403e3b3a37312c3134353939393931302d28221a1208000000000000000000000009121b232b31394045474b51535556565654524d4a48434c52545454545454514c433a2f24190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c252d353a3e3f404040403b3a37312a21180e03000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4847423c332a1f15090000000000000000000000000000000000000000000000030e19242f3840474c4d53535353535353535353535353535353535353535353535353443f3830261c110600000000000000000000070b141b22272b2d3337393b3d3e3f3f3e3d3b3937332d2b28221c140b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c4c4c4c4c4847423c332a2015090000000000030b12181c1f202323232323232321201e19140d05000000000000000000000000040c13181d202023232323232323201f1c17110a0300000000000000030b12181c1f20232323232323232323232323232323232323222221201d191413110d08020000000000000000000000000000050e171f252a2d2e30303030302d2c29241e160d04000000000000000007111921272c2f30303030302f2e2b26201910070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d9d9083908d8079716d686a6a696e747e8b949e9c908376675c5145382c1f1306000000000000000000000000000000040a0f1215151717171717171717171717171717171717171717171717171717171717171717171413110d08020000000000000000000007101920283035383f4446494b4d4d4d4d4b4847433c383c4042464646463e3c39332c241a1005000000000000000000000009111a1f272f34383a404547484949494746423d3c3a414547484848484745413a31281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2e3133333333332f2e2b261f180f06000000000000000000000000000000000000000000000000000007111c252d353a3e3f404040403b3a37312a21180e03000000000000000000000000000000000000000000000007131f2b36404a52585a6060606060606060606060606060606060606060606060605f504a42382e23170c0000000000000000000910191d262d3337393f4446484a4b4c4c4b4a4846443f3938332d261d17110a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c252d353a3e3f404040403b3a37312a21180e0300000000000000070c101213171717171717171414110e0802000000000000000000000000000001070d111314171717171717171312100c060000000000000000000000070c10121317171717171717171717171717171717171616151413110d080705010000000000000000000000000000000000050d141a1e2021232323232321201d19130c0400000000000000000000070f161b1f22232323232322221f1b150e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d978a7e85918d847e7a787777787b808b909ba0958b7e7164554b4034281c10040000000000000000000000000000000000030608090a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a070705010000000000000000000000050f19222a323a41464a50535558595a5a595855534e4644484d4e535353534a49453e362c22170c000000000000000000000000080d151d23292c2f34383a3c3d3d3c3b3a36302f2f35393a3b3b3b3b3a39352f281f160c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a11181e2225262626262622211e1a150e06000000000000000000000000000000000000000000000000000000000a131c232a2e3133333333332f2e2b261f180f060000000000000000000000000000000000000000000000000b1723303c47525c64676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5c544a3f34281c10030000000000000009121b222b2f383f4446495053555758585857575553504946443f382f27221b140b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2e3133333333332f2e2b2620180f06000000000000000000000406070a0a0a0a0a0a0a08070502000000000000000000000000000000000000010406070a0a0a0a0a0a0a0706030000000000000000000000000000000406070a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0908070704010000000000000000000000000000000000000000000002090e11141417171717171413110d0801000000000000000000000000040a0f131516171717171615130f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d978a7d7d8792918b8684838485888d929ba0989184796d6053473a2e23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17212a343c444c52545c6062656667676664625f58535053595b60606060575550483e33281c1105000000000000000000000000030b12181c1f23292c2d2f30302f2e2d2a252324292c2d2e2e2e2e2d2c29241e160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191514120e09030000000000000000000000000000000000000000000000000000000000010a11181e2225262626262622211e1a150e06000000000000000000000000000000000000000000000000000d1a26333f4c58646e7479797979797979797979797979797979797979797979797976665c5044382c1f120600000000000008111b242c343d41495053535b606163646565646362605b5353504a423e332d261d140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a11181e2225262626262622211e1a150e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0a0a0a0a0706040100000000000000000000000000000000030709090a0a0a0a09080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d978a7e717e8791969291909092979a9f9c9691867c6f675c5145382c1d120700000000000004090e111213131313130a09070400000000000000000000000000060b0e1011131313130c0b0906010000000000000000000000000000000000000000000009141f29333c464e565e61666d6f7273747473716e6a65605c5d65686c6c6c6c64615a5045392d2114080000000000000000000000000001070c1013181c1f202223232321201e1a16191d20212121212121201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090c0c0d0d0d0d08080602000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191514120e090300000000000000000000000000000000000000000000000000000e1a2734414d5a677480868686868686868686868686868686868686868686868686786d6053463a2d2013070000000000040d1a232c363e464e535b6063656c6e7071727271706e6c6564605b544f443f382f261b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191514120e09030000000000000000000000000000000000000000000000020507080a0b0c0d0e0e0d0c0c0a0806060300000000000000000000000000000000000000000000000000010507071313131312110f0c070100000000000000000000000003080b0d0e1313131313130c0b090601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7e71707c848b8f929896969598928f8a847c6f6a5f554b4034291c0b000000000000080f151a1d1f2020202020171614100b05000000000000000000040b12171b1d1e20202020191816120d070000000000000000000000000000000000000000020e1a25303b454e585f686d73797c7e808080807e7b77726d66656f7579797979716c6155493c3023170a0000000000000000000000000000000004070c101314151616161414110e090d111314151515151413110d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090c0c0d0d0d0d08080602000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774808d9393939393939393939393939393939393939393939386796d6053463a2d20130700000000010c161f2c353e48505860656c7075797b7d7e7f7f7e7d7b7975716c666159504941382d22170b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090c0c0d0d0d0d08080602000000000000000000000000000000000000000000010407080e1114141618191a1a1a1a1919171513120f0b0605020000000000000000000000000000000000000002080d111314202020201f1e1b18130c0500000000000000000001080f14181a1b202020202020191816120d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7e726a6f787e8286888989898885827e786f6a5f584e43392f23180c000000000009121920262a2c2c2d2d2d2d2323201c16100800000000000000050e161d23272a2b2d2d2d2d2525221e1811090100000000000000000000000000000000000005121e2a36424d575f6a6f7a8085888b8c8d8d8c8b88847e786e697581868686867e7164574a3e3124170b00000000000000000000000000000000000000040607090a0a0908070502000104060708080808070604010000000000000000000000000000000000000000000000030506080b0d0d0e0e0d0b0907060300000000000000000000000000000000000000000000000000000004090d0f0f131313130e0d0b0803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774808d9a9fa9a19e959494949494949494949494949494949386796d6053463a2d2013070000000008131e28313d47505a616a6f787d8185888a8b8b8b8a8a8885827d78706b605b53493f332721160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314191e20212325262627272726252422201f1c1714120e090300000000000000000000000000000000050c13191d20212d2d2d2d2b2b28241e170f0600000000000000020b131a202427282d2d2d2d2d2d2525221e18110901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265666d7176797b7c7c7c7b7976716d665f584e463c31271d12070000000008121b242b3136383939393939302f2c27211a11080000000000040e1720282e3336373939393932312e29231b13090000000000000000000000000000000000000714202d3a46525e696f7c848c929798999a9a999796918b837b6e75828f9393897d7063564a3d3023170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f12131518191a1b1a1918161312100c06000000000000000000000000000000000000000000000002091015191b1c202020201b1a17140e0801000000000000000000000000000000000000030506090b0c0c0b0a07060401000000000000000000000000000000000000000000000000000000000000000000000e1a2734414d5a6774808d99a3a19792888787878787878787878787878787878786786d6053463a2d201307000000010d19242f3a434f59616c717c838a8e929896979898979697928f8a847d736c655b50443d33271c10040000000000000000000105070713131313130d0c0a070200000000000000000000000000000206080813131313130c0b0906010000000000000000000000000000000000000000000000000000000000000002080e13191d2021252a2d2e303233333434333332312e2d2b2822201e1a140f0a0400000000000000000000000000050e161e252a2d2e393939393837342f2921180f050000000000000b141d252b30333439393939393932312e29231b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f72655c6064666d6e6f706f6e6d6664605c544e463c342a1f150b01000000040f19242d353d424546464646463d3c38332c231a1005000000000b16202932393f4344464646463f3e3a342d251b11070000000000000000000000000000000005121e2b37424d57616e7b8591969e9c97928f8d8c8d8e929590847b76838f9c96897c6f6356493c30231609000000000000000000000000000000000000000000020507080a0b0c0c0b0908060300000000000000000000000000000000000000000000000000000002090e11171b1f20222426272727262522201f1c17110f0a0400000000000000000000000000000000000000030c141b212528292d2d2d2d2726241f1a130b02000000000000000000000000000000060b0f12131618181918161413100d070100000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c86929f9e92857b7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a76665c5044382c1f120600000004111d2935414c55616b717e8690959b9c96918f8e8d8e90959a9c96918880776c60594f44382c21160b0000000000000002080d11131420202020201a1917130e07000000000000000000000003090e1214152020202020191816120d070000000000000000000000000000000000000000000000000000000000050d14191e24292c2d3036393b3d3e3f404141403f3f3d3b3938332d2d2a251f1b150d080100000000000000000000020c16202830363946464646464544403a332b21170c010000000007111d262f363c40414646464646463f3e3a342d251b11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f72655853545c606263636261605c5453504a423c342a22180d03000000000915202b353f474e5253535353534a48443d352c21160b00000006121d28323b444b4f51535353534c4a463f372d23180d010000000000000000000000000000000714212d3a46535f6975828f97a19c928c8582807f8082858a9190837983909d95897c6f6256493c2f2316090000000000000000000000000000000000000002090e11141417181919181515120f0a03000000000000000000000000000000000000000000000000070c141a1b22272b2d2f313334343433312f2d2c28231c1b160e090200000000000000000000000000000000020c151e262c313536393939393433302b241d140b01000000000000000000000000020a11171b1f2023242526252320201d18120e09030000000000000000000000000000000000000000000000000000000000000815222e3b4754606a727f8c939e978f82776d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d685c544a3f34281c10030000000613202c3945515d67707d8792989d948f89848281818284878d93999a938c7f736b6054483d32271b0f030000000000050c13191d20212d2d2d2d2d2626231f19120a010000000000000000060e151a1e21222d2d2d2d2d2525221e181109010000000000000000000000000000000000000000000000000000060e171f252a3035393a3e414647494b4c4d4d4d4d4c4c4a4846443f3b3a36302b262019130c0400000000000000000008131e28323a4146535353535352504c453d33291e1307000000030c19232f3841484c4e5353535353534c4a463f372d23180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c4a5053555656565553504a46443f38302a2218100700000000000e1a26313d4751595e5f6060606056554f473d33271c100400000b17232e39444d565b5e60606060585651493f34291e12060000000000000000000000000000000815222e3b4855616e7b87939f9c928c80797573737375797e84908c8083909d95897c6f6256493c2f231609000000000000000000000000000000000000050d14191e2021242525252422211f1a15100b050000000000000000000000000000000000000000030b12181f252a2d3337393b3e40404141403e3c3a38342e2b27201a140d0500000000000000000000000000000009141e2730373d414246464646413f3c362f261d13080000000000000000000000020b141b22272b2d2f31323232302d2c29241d1a140d05000000000000000000000000000000000000000000000000000000000006131f2b37434e58626d75828f969e948c7f726b61616161616161616161616161615e564a42382e23170c000000000714212d3a4754606d7a8592999d928d827c7875747475777b818792999f93877d7063594f44382c20130700000000050e161e252a2d2e393939393933322f2a241c130a00000000000000060f1820262b2e2f393939393932312e29231b1309000000000000000000000000000000000000000000000000020a1117202930363a4145474b4d5254565859595a5a5a5958575553504a4846423b373229241e160d0500000000000000010d1925303a444c525f606060605e5c574f453a2f24180c0000000b151e2b35414a53595b606060606060585651493f34291e120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f4446484949494846443f3a38342e261e181007000000000000111d2a36424e59636a6c6c6c6c6c6361594f44382c20140700020e1b27333f4b565f676a6c6c6c6c65625b51463a2e2216090000000000000000000000000000000d192633404c5966737f8c9aa1978c80736d66676667666d717a83908685929f95887c6f6255493c2f2216090000000000000000000000000000000000050e171f252a2d2e31323232312f2e2b26201c161008000000000000000000000000000000000000040c151c23283036383f4446484b4c4d4e4d4c4b4946443f3837322a251f170f070000000000000000000000000004101b26303942494d4f535353534e4c4741382f241a0e03000000000000000000000a141d262d3337393c3e3f3f3e3d3a39352f2a251f170f0800000000000000000000000000000000000000000000000000000000030f1b27323d46515b606d7a8491999f92877d6f685e535454545454545454545454524c443830261c110600000004101d2935404b556673808c979e958d80786f6b68676768696e747e87929f999083766b6054483b2f221508000000020c162028303639464646464646403f3b352e261c12070000000000030e18212a31373a3b46464646463f3e3a342d251b110700000000000000000000000000000000000000000000020b141c2228323b41464c525457565e616365666667676666656461605b5454524d47433c352f281f170f0500000000000005111d2a36414c565e6c6c6c6c6c6b6861574c4034281b0f030007121d27303d47535d64676c6c6c6c6c6c65625b51463a2e22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f383a3b3c3d3c3b3a38342e2c28231c150c0600000000000000121f2c3845525e6a757979797979706b6155483c2f2316090004101d2a36434f5b67717779797979726d62564a3e3125180b0000000000000000000000000000030f1b27333f49536975828f9c9e9185796d605c5459545c60686d7a85929297a295887c6f6255493c2f22160900000000000000000000000000000000020d17202930363a3b3d3e3f3f3e3c3a37312c28211a110900000000000000000000000000000000040d161e272e343b42464950535557595a5a5a59585553504a47433d363029211910070000000000000000000000000915212c37424c545a5c606060605a58524a41362b1f140800000000000000000006111b262f383f4446494b4b4c4b4947454039363129211a1209010000000000000000000000000000000000000000000000000000000a16202b343f45525d686f7c87929f9991847a6d655b504747474747474747474746413a32261e150a0000000006131f2c3845515d6778848e8f919083786d6660595b5a575e616c727f8c969f95897c6f6356493c2f24190d01000008131e28323a41465353535353534d4b4740382e24190e02000000000915202a333c42474853535353534c4a463f372d23180d010000000000000000000000000000000000000000000a141d262d333f444d52565d606468686e707172737474737272706e6c6665615e57534e45413a312921170d0400000000000713202d3946525e6876797979797873685c5044372b1e1105000c18232e39424f59646f74797979797979726d62564a3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f322d2f30302f2e2d2b28231f1c17110a03000000000000000013202c3946535f6c7987868686867d7063564a3d3023170a0004111e2b3744515e6a7784868686867f7265584c3f3225190c000000000000000000000000000005121f2b3744505b657885919e9a8e8174675d514b4c4a50565e68717e8a96a1a995887c6f6255493c2f2216090000000000000000000000000000000009141f29323b4246474a4b4c4c4b4847433c38332c231b12090000000000000000000000000000030c161f28303940444d52535b60626466676767666462605c54544e46423b332b2319100700000000000000000000000d1925313d49545e65696c6c6c6c67645c52473c3024170b0000000000000000000b17222d384149505356575859585653514b46423b332c241b1309000000000000000000000000000000000000000000000000000000040f19222935414c56606a727f8c939e968f82776c60594f443a3a3a3a3a3a3a3a3936302820150c03000000000714202d3a4753606d797f818384877e71665c544f4e4e4d525a606d7984919e9a8d817467554c4135291d110400010d1925303a444c525f60606060605957524a40352a1f1307000000020e1a26313c454e53556060606060585651493f34291e1206000000000000000000000000000000000000000006111c262f383f4450565e61686d7175787a7c7e7f808080807f7f7d7b7976726e69625f58514c433b332920160c01000000000714212e3a4754616d7a8686868685786b5e5245382b1f120005101c2834404b54606b74818686868686867f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f32252223232322201f1c1712100c060000000000000000000013202c3946535f6c7986929393897d7063564a3d3023170a0004111e2b3744515e6a77849193938b7f7265584c3f3225190c00000000000000000000000000000613202d394653606c7986939f988b7e7265554b40403f444c56606d7984919ea295887c6f6255493c2f221609000000000000000000000000000000020e1925303b444d5254575858585755534e48443e352d241b0f06000000000000000000000000000b151e28313a424a51575e61656c6e717373747473716f6d66626058524d453d352b22190e04000000000000000000020f1b2835414d5a65707579797979746e64584c3f33261a0d0000000000000000030f1b27333f49535b60626465656563605d55534d453e362d251b110800000000000000000000000000000000000000000000000000000007101924303a444e58626d75828f969e948c7f726b60564c41382d2e2e2e2e2e2d2a251e160e03000000000006131f2c3845515d676d7274767879786d6054555554535049505c6673808d999d908477675d5145392c2013060005111d2a36414c565e6c6c6c6c6c6c66635c52473b2f23170a00000006121e2b37424e575f6c6c6c6c6c6c65625b51463a2e22160900000000000000000000000000000000000000040d17222d38424a505a62686e737a7e818587898b8c8c8d8d8d8c8b8a8885837f7b766f6a605d554d453b32281e1308000000000714212e3a4754616d7a8793939185786b5e5245382b1f12050e1b242c3845515c666f7d8893939393938b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a7784919d988b7f7265584c3f322519161616151312100b060300000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000714212d3a4754606d7a879aa4968a7d7063574a3d2f343a44505c6673808d9aa295887c6f6255493c2f22160900000000000000000000000000000005111e2a36424d565e616465656564625f58554f473f372d21180e03000000000000000000000007121c27303a434c545c60696e73787b7e7f8081807f7e7c79746f6a615e574f473d342b20160c020000000000000000030f1c2936424f5c697582868686868074675a4e4134271b0e010000000000000005121f2b3744505b656c6f71727271706d67615e5750483f372d231a0f0500000000000000000000000000000000000000000000000000000008131e28323d46515b606d7a8491999f92877d6f685e53493f332721212121201d19130c0500000000000004101d2935404b555d60666769676d6d666061626261605b53535463707d89969f93867a6d6054473a2d211407000713202d3946525e68767979797979736e63574b3f3226190c0000000814212e3a47535f6a767979797979726d62564a3e3125180b000000000000000000000000000000000000010c161f28333f4a545b606c717b80868a8e9297969899999a9a999998979892908c87827c746d675e574d443a2f24190d040000000714212e3a4754616d7a87949e9185786b5e5245382b1f120c17202b37424d57606d7984919aa49f9f988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a77849199988b7f7265584c3f3225190c0a090807060300000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000814212e3b4754616e7a8794a196897c6f6356493c3028343f4a5464717d8a97a295887c6f6255493c2f2216090000000000000000000000000000000714202d3a46525e696e70717272716f6a63615951493f332a1f150900000000000000000000000c18232e39424c565d666d737b8084888a8c8d8d8d8c8b8885817c756e6960594f463d32281e13080000000000000000030f1c2936424f5c6975828f93938d8174675a4e4134271b0e01000000000000000613202d394653606c777c7e7e7f7e7c7a746e69615a51493f352c21170d020000000000000000000000000000000000000000000000000000020c16202b343f45525d686f7c87929f9991847a6d655b50443d32291d141413110d080200000000000000000c18242f39434b5153595b575f6166676d6e6f6f6e6c6564605c616d7a8799a499887b6e6255483b2f221508000714212e3a4754616d7a8686868686807366594d4033261a0d0000000815222f3b4855626e7b86868686867f7265584c3f3225190c00000000000000000000000000000000000007131d28313a44505b666c747e868d92989b9e9a96989291909090919298979b9c9a938f8781796e695e564c41352920150a0000000714212e3a4754616d7a87949e9185786b5e5245382b1f08131e29323a47535f69737f8c95a0acaaa5988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2b3744515e6a77848c8c8c8b7f7265584c3f3225190c00000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f232e3c4855626f7b8895a295887c6f6255493c2f2216090000000000000000000000000000000814212e3b4754616e7b7d7e7f7f7e7b77706b625b51453c31261a0e0200000000000000000004101c2834404a545d686d7880868d91969799989798999797928e89827b6f6b60584e443a3025190d0300000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000714202d3a4753606d79868a8b8c8b8986817b716c625b51473e33291f1409000000000000000000000000000000000000000000000000000000040e19222935414c56606a727f8c939e968f82776c60594f443a2f261b110605010000000000000000000007121d27313940454b545c60696e73777a7b7c7c7b7976716d66606c7986939f96897c6f6356493c30231609000714212e3a4754616d7a879393938c807366594d4033261a0d0000000815222f3b4855626e7b889393938b7f7265584c3f3225190c0000000000000000000000000000000000010d18242f3a43505a606c78818b92989f9e96918d898785848483848485888a8e92979f99938e837b6e685d52453d32271b0f0300000714212e3a4754616d7a87949e9185786b5e5245382b1f0d1925303a44505a626e7b86929f9e9b9ea5988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727f7f7f7f7f7c6f6256493c2f23160900000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222e3b4854616e7b8794a195887c6f6255493c2f2216090000000000000000000000000000000c1926333f4c5966727f8a8b8b8b8a88847d726d62574d42372b1e12060000000000000000020d17202c3844515c666d7a828c92989e95908d8b8a8b8c8f92999b938f857d6f6a60564c4135291f140900000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000714202d3a4753606d7a869398989898928e867e726d625a50453b30251a0e0400000000000000000000000000000000000000000000000000000007101924303a444e58626d75828f969e948c7f726b60564c41382d22170e050000000000000000000000010b151f28343f4a545c666d737b7f83868788888785827e79706b657885929f968a7d7063574a3d3024170a000714212e3a4754616d7a87949f998c807366594d4033261a0d0000000815222f3b4855626e7b88959f988b7f7265584c3f3225190c000000000000000000000000000000000004111d2935404b55626c74808d939f9f96918a84807d7a787777767778797b7d81858c92999f9591847a6d60584e43372b1f130600000714212e3a4754616d7a87949e9185786b5e5245382b1f151f2a36414c56626c76828f989e938e939e988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313d4a56626d72737373736f6a6054473b2e22150800000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000c1926333f4c5966727f8c989898979591887f72695f53473a2e211408000000000000000008141f2b37434e58606d78828f949f96918984807e7d7e7f83868e939c9792867c6f685e52463b31261a0e02000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000714202d3a4753606d7a868f8f9092999f9892887f726c61574d42362a21160a0000000000000000000000000000000000000000000000000000000008131e28323d46515b606d7a8491999f92877d6f685e53493f332720170b0200000000000000000000040e18222c3844505c666d787f868c909594959598928f8b847d736d7885929e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000613202c3945515d67717e8b929d9f948f847e7973706e686b6a6a6a666c6e71747a80879297a0968e81756a6054473b2e22150900000714212e3a4754616d7a87949e9185786b5e5245382b1f1d27313946525e68717e8b949f948e818e9b988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222e3a45515b6265666666666260584e43372b1f130600000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000c1926333f4c5966727f8c8f90939aa09a92867b6e6255483b3025190d01000000000000020e1925303b47535f6a73808c949f9591847d777372717173767b818c929c9891847a6d61574d42362a1e1205000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000713202d3a4653606d7983828283868c92999a93887e70695e52463d32271b0f04000000000000000000000000000000000000000000000000000000020c16202b343f45525d686f7c87929f9991847a6d655b50443d32291d140a000000000000000000000a15202c38444f59606d78818c92989d9c9691908f8f9196918a80737885929e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000714202d3a4753606d7985919e9f958f827a716d6663615e565d5d545b606164686d737d85929f9e93897c6f6256493c30251a0e02000714212e3a4754616d7a87949e9185786b5e5245382b18242f39434f59616d7a85929e988f827e8a97988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d29343f495156585959595956544e463d32271b0f0300000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000c1825323f4b5865727f838284879297a1988d807467564c41362a1d110500000000000005111e2a36414d56626f7c87929f9891837a706b6665646566696e757f8c939e968e8174695f53463a2d211509000000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e010000000000000006131f2c3845515c666d767675767a808792989a92857b6e61594f43382c20160a00000000000000000000000000000000000000000000000000000000040e19222935414c56606a727f8c939e968f82776c60594f443a2f261c11060000000000000000030f1b26323c4855616b74818e939f9c948f8984838282858990928c7f7885929e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000005121e2a36424d5766727f8c97a1999083796d68605c5454524d51504a505355565d606b717e8a959f9b8e817468574d42362a1e1205000714212e3a4754616d7a87949e9185786b5e5245382b1d2935404b55606b75818e979f92867b7e8b98988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232d373f454a4b4c4c4c4c4947433d342b20150a0000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000b1724313d4a56626d727676777c85929e9e918478685e5246392d2013070000000000000714202d3946525e6875828f999f92867b6e686059585758565e616d75828f999f92877b6e6155483c31261a0e020000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e010000000000000004101c2834404b545c606a6968686d737d869299978f82756b6054483d32271b0f020000000000000000000000000000000000000000000000000000000307101924303a444e58626d75828f969f948c7f736b60564c42382d22170e050000000000000006131f2b37434e5863707d8a939d9c928d827c78767576787d838d92877c85929e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000714212d3a46535f69778490989b92877c6f675d56504a47464144433f4446484c5259616c7783909d9e928578695e52463a2d201407000714212e3a4754616d7a87949e9185786b5e5245382b262f3845515d67707d89939e958c7f727f8c98988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b242d343a3d3f404040403c3b37322b22190f040000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000915222e3a45515b62656a696a727f8c98a196877a6d6154473a2e2114070000000000000814212e3b4754616e7b86929f9a8d8074695f564f4b4a4b4d525b626e7b87929f998d807366574d42372b1e12060000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e0100000000000000000c18232e39424b51535d5c565d606b707d87929f93897c6f63584e43382b1f140900000000000000000000000000000000000000000000000000040a0f1315161e28323d46515b606d7a8491999f92877d70685e544a3f332820170b020000000000000815212e3b47535f6a7683909d9f948d80766f6a6968696b7078808d908385929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000815222e3b4855616e7b87898c8e8e81756a5f554c443f3b3936302d3338393b4145505a66727f8c99a197877b6e6154483b2e211508000714212e3a4754616d7a87949e9185786b5e524538222d38414e58606d7984919e99908378737f8c99988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121b23292e3132333333332f2e2b2720191007000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000005111d29343f485156585d58626f7b8895a895887c6f6255493c2f2216090000000000030f1b27333f495366727f8c99a095877b6e61574d433f3e3e4247535f6a76828f9c9e918478695f53473a2d2114080000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000007121d273039404546504f4c5259606b73808c969c8f82766a6054473b30251a0e000000000000000000000000000000000000000000000000070f161b1f222325252b343f45525d686f7c87929f9991857a6d665b50443d32291d140a0000000000000916222f3c4955626f7c88959f9c8f82776c6260585c5960666c74808d909297a2978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000714212d3a46535f69767a7c7f81847d7063584e433a342e2d2a2522282b2d2f353e4a5764717d8a97a995897c6f6256493c2f231609000714212e3a4754616d7a87949e9185786b5e52453827333f49535f6a73808d969f93877c6f73808d99988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000911181d2224252626262623221f1b150f0700000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f221609000000000000000000000000000000010c18232d363f454a4b5053606d7a869aa496897c706356493d3023160a000000000005121f2b3744505b6576838f9c9d908477695e53453b31313037424e5765727f8b98a196887b6e6155483b2e2215080000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e010000000000000000000b151e272e34383a434341454f59606d7984919e94897c6f62574d42362a1c11060000000000000000000000000000000000000000000007101920272b2e2f3131313135414c56606a727f8c939e978f82786c60594f443b2f261c110600000000030f1c28333f4a546673808c99a096897c6f655b544e4f4f545b606d7984919ea2a9978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0505050815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000005121e2a36424d575f686d70727577706b6155463c31282320202123282c2d32383e4a5764707d8a97a396897c706356493d3023160a000714212e3a4754616d7a87949e9185786b5e5245382b3744505b656f7c87929f968d80746a74808d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c11151818191919191615130f0a040000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000006111b242d343a3d3f4653606c7986939f96897d7063564a3d3023170a00000000000613202d394653606c7885929f9a8d807467574d42332a2426313c4855626f7b8899a4978b7e7164584b3e3125180b0000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000000030c151d23282c2d372f353d45515c67717e8b979b8e8275695e5246382d22170b000000000000000000000000000000000000000000040f19222b32373b3c3e3e3e3e3e3e444e58626d75828f969f948c7f736b60564c42382d22170b0400000006121f2b3844505b667683909c9d9184776b6053494342424a515c67717e8a97a1a4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a121212121215222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000020e1a26313b454d565d606365686b6361594f44342a2124292c2d2e34383a3d4448505a65727f8c98a895887b6f6255483c2f221509000714212e3a4754616d7a87949e9185786b5e52453836414d56606c778390999e91847a6d6774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090b0c0d0d0d0d0908060300000000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f221609000000000000000000000000000000000009121b23292e313744505b657986929f96897d7063564a3d3023170a00000000000815222e3b4855616e7b8897a2988b7e7165584b3e312518202d3a4653606d7986939f998d8073665a4d4033271a0d0000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e0100000000000000000000030b12181c1f202a242934404b55606d7985929e92867b6e61544a3f33281c0f0300000000000000000000000000000000000000000a16202b343d4347494b4b4b4b4b4b4b4b515b606d7a8491999f92877d70685e544a3f332821160a0000000613202d394653606c7985929f9a8d817467594f41382f38404b55606d7985929ea4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261e1e1e1e1e1e1e222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000009141f29333b444c525456595b5e57554f473e332d2e2f35393a3d404446494f545a616c7683909ca095877a6d6154473a2e211407000714212e3a4754616d7a87949e9185786b5e5245313946525e68727f8b959e938a7d70676774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988b7f7265584c3f3225190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f2216090000000000000000000000000000000000000911181d2227333f495f6c7986929f96897d7063564a3d3023170a00000000000a1724303d4a5763707d8a96a996897c706356493d3023161f2c3845515c677784919e9b8e8175685b4f4235281c0f0000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000000000000070c1013131d19232f3945515d6773808d9a998c7f73665b5044382b1f130800000000000000000000000000000000000000030f1b27323d464e5456585858585858585858585d686f7c87929f9991857a6e665b50443d32271b0f0300000815222e3b4855616e7b8898a2978b7e7164584b3e2f262f3944505c6674818e9aa4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d40332b2b2b2b2b2b2b2b2b2f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000030d172129323a414547494c4f514a48443e3535393a3e4145474a4a5153565960636c717e8a949f9d918477685e5246392d201307000714212e3a4754616d7a87949e9185786b5e524539434f59616e7b85929f988f82756c616774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a0f0f0f0e0d0b070300000000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d988c7f7265594c3f3226190c00000000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000060c1117222d46535f6c7986929f96897d7063564a3d3023170a00000000000b1824313e4b5764717e8a97a195887b6e6255483b2f22151c2834404b556a7683909d9c8f8376695c504336291d100000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000000000000000004060708121d2c38434e5865727f8b989e9184786c6053463a3025190d0100000000000000000000000000000000000006131f2b37434e5860626464646464646464646464646a727f8c939e978f82786c60584e43382c1f130700000a1623303d495663707d8996aa96897c6f6356493c302328343f4a5464717e8b97a4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4038383838383838383838383b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000000060f1720282f35393a3d3f42443d3c383a3b4146474a4c515456545c6063666b70767e87929fa3988d807366564c41362a1d1105000714212e3a4754616d7a87949e9185786b5e5245404b55616b75818e979f92867b6e615a6774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101316161c1c1c1a1a17130e08010000000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d998c7f7266594c3f3326190600010000000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000113202c3946535f6c7986929f96897d7063564a3d3023170a00000000000c1825323f4b5865727e8b98a194877b6e6154483b2e211518232e43505c6976838f9c9d9083776a5d5044372a1d110000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e0100000000000000000000000000000000000915222e3b4854606a7783909da196897d7063564c4135291d11050000000000000000000000000000000000000815222e3b4754606a6f717171717171717171717171717175828f999f948c7f736a6054483b2e22150900000b1824313e4b5764717e8a97a194877b6e6154483b2e21232e3c4855626f7b8895aa978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d454545454545454545454545454855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000000060d161e24292c2d30323532383b4246484c525457555d606366666d6f73777d828b9299a39f92867a6e6154473b3025190d01000714212e3a4754616d7a87949e9185786b5e524545515d67707d8a939e958b7f72695e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161c2022232929292726241f1a130b0200000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d998c807366594d402e23170c0f0d0a05000000000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000c1926333f4c5966727f8c99a094877a6d6154473a2e21141c2936424f5c6975828f9c9d9084776a5d5144372a1e110000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e010000000000000000000000000000000004111d2935414c56626f7c8995a0a89b8e8175685e5246392d20150a0000000000000000000000000000000000000916232f3c4956626f7c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7f86929f9f93877c6f6256493c2f23160900000c1925323f4c5865727f8b98a093867a6d6053473a2d20202d3a4753606d7a8698a3978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c8073665951515151515151515151515151515155626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000000040c13191d20212930363d44484d5354565d616467676d707376797c8084898f949fa39f928b7f72685e5246392d1e130800000714212e3a4754616d7a87949e9185786b5e52424e58606d7984919e999083786c60575a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111921272c2f303636363433302b241d140b01000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d9a8e817467544a3f34281c1d1c1915100a0300000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000c1926333f4c5966727f8c99a094877a6d6154473a2e21141c2936434f5c6976828f9c9d9084776a5d5144372a1e110000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e01000000000000000000000000000000000613202c3945525d6874818e9ba39f9f92867a6d6154473c32271b0f0100000000000000000000000000000000010e1b2734414e5a6774808b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b9299a3a4998b7e7165584b3e3225180b00000c1926333f4c5966727f8c99a39986796d6053463a2d20202c3945515d677986929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c8073665e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000000000001081019222b333b42464f54575e6166686d7174777a7d808385898d91959c9f9f98928c80746d62564c41362a1e0c0200000714212e3a4754616d7a87949e9185786b5e524a545f6a73808d969f92877c6f665b505a6774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19232b32383b3d424242413f3c362f261d1308000000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d9c908376665c5044382c28292826211b140d04000000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000c1925323f4c5865727f8b98a194887b6e6155483b2e22151d2a3643505d697683909c9d9083776a5d5044372a1d110000000000030f1c2936424f5c6975828f9c9a8d8174675a4e4134271b0e00000000000000000000000000000000000714212d3a4754606d7a86929f999299998b7f7265584e43372b1d120700000000000000000000000000000000010e1b2734414e5a6774818d9797979797979797979797979797989c9c9c9c988b7e7165584b3e3225180b00000c1926333f4c5966727f8c999f928679665c5044382b1f1d2935404b556c7885929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c80736b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000000000000030c18222b343d454d52596063696e72767a7d818386898c8f9298999da09e99928e867f746e645b51443b3025190e0000000714212e3a4754616d7a87949e9185786b5e52505c666f7c87929f968d80736a5f544a5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d4448494f4f4f4d4c4740382f241a0e030000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919d9f9285796d6053463b31343635322d261f160d030000000000000815212e3b4854616e7b8794a195887c6f6255493c2f222d3a4754606d7a8793a095887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000b1825313e4b5864717e8b97a295887b6f6255483c2f22151d2935404b556a7783909d9c8f8276695c504336291d10000000000000071c2936424f5c6975828f9c9a8d8174675a4e4134271b0e0902000000000000000000000000000006131f2b37434e5865727f8b98999286929d9083776a605447392f23180c00000000000000000000000000000000010e1b2734414e5a6774818d8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8b7e7165584b3e3225180b00000c1926333f4c5966727f8c999f938679675c5145382c1f1d2a36414c566c7885929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807878787878787878787878787878787878787878787c8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000000000a151e2a343d464f575e616b6f757b7f83868a8d909399999c9fa09d9997928d86817c726d645c52493f32291e14080000000714212e3a4754616d7a87949e9185786b5e4d57606d788390999e9184796d60584e4e5a6774818d9a988b7f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27323d474f54565c5c5c5a58524a40362b1f13070000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919da298897c6f63574d43414143423e3830281f140a0000000000000815212e3b4854616e7b87949c95887c6f6255493c2f222d3a4754606d7a87939c95887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000a1723303d4a5663707d8996aa96897d7063564a3d3023171f2c3845515d677885919e9b8e8175685b4e4235281b0f00000000030b12182936424f5c6975828f9c9a8d8174675a4e4134271e1a140d05000000000000000000000000000815222e3b4754606a7783909d9387808c9995887c6f62554b4034291c1004000000000000000000000000000000000c1825323f4b5865727f828282828282828282828282828282828282828282827d7063564a3d3023170a00000c1926323f4c5965727f8c98a49986796d6053463a2d20202d3946525e687986929f978a7d7164574a3e3124170b000714212e3a4754616d7a8794a09f928584848484848484848484848484848484848484848484919ea5988b7f7265584c3f3225190c000000000000000000000000000000000000000006111c26303c464f5960696e757c82878c9093999a9d9f9f9d9a9795908d8985807b756e6a635b524a41372d20170d020000000714212e3a4754616d7a87949e9185786b5e525e69727f8b959e93897d70675d51464e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f59606369696967645c52473c3024170b0000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919da79a8e8174695f554e4d4e504e49423a30261b100500000000000815212e3b4854616e7b878f8f8f887c6f6255493c2f222d3a4754606d7a878f8f8f887c6f6255493c2f22160900000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000815222e3b4855616e7b8898a2988b7f7265584c3f32261b202d3a4753606d7a86939f998d8073665a4d4033271a0d000000030c151c232836424f5c6975828f9c9a8d8174675a4e41342d2a251f170e05000000000000000000000004111d2935414c55626f7c89959c90827a86929a8d8174675c5145382c1f1409000000000000000000000000000000000b1824313d4a56626d7275757575757575757575757575757575757575757575706b6054483c2f22160900000b1825323e4b5865717e8b98a093877a6d6054473a2d21212e3a4754616d7a8799a3978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0a297929191919191919191919191919191919191919191919196a1a5988b7f7265584c3f3225190c00000000000000000000000000000000000000000c17232e38424e58606b6f7b82898f939a9d9f9f9c999992908d8a8784807c79746e69625f58514941382f251b0e05000000000714212e3a4754616d7a87949e9185786b5e5a616e7b86929f978e81756b60554b404e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3b4854606b70757575746e64584c3f33261a0d0000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0004111e2b3744515e6a7784919da09590867b6e675f585a5b5c5a544c42382d21150a00000000000714212e3a4754616d7a82828282827b6e6155483b2e222d3a4753606d7982828282827b6e6155483b2e22150800000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000713202d3a4653606d7985929f9a8e817467584e43372b2628303c4855626f7c889aa4978a7e7164574b3e3124180b0000000b151e272e3438424f5c6975828f9c9a8d8174675a4e413b3a36302920170d02000000000000000000000613202c3945515d6774818e9a998b7f75828f9c9285796d6053473b31251a0e000000000000000000000000000000000915222e3a45515b6265696969696969696969696969696969696969696969696360594f44382c20140700000a1724313d4a5764707d8a97a195887b6e6255483b2f22232f3c4956626f7c8995ab978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9da0a8a5988b7f7265584c3f3225190c0000000000000000000000000000000000000003101c28343f4a545f6a6f7d858f939c9f9f9b9992908c898683807d7a77736f6d66615e57534e463f372f261d130900000000000714212e3a4754616d7a87949e9185786b55616c75828f989e92857a6d61594f43414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707d8282828074675a4d4134271a060000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0005111e2b3844515e6b7784919e9d90839083796f6a68676769665e54493e3226190d00000000000713202d3946525e686d75757575756e695f53463a2d212c3945515d676d75757575756e695f53463a2d21140700000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000006121f2b3844505c6676828f9c9e9184786a5f54473d37313438424e5865727f8c98a196887b6e6155483b2e221508000007121c2730394044464f5c6975828f9c9a8d8174675a4e484746423b33291f1409000000000000000000000714212d3a4754606d7a86929f92867a717e8a98978a7e7164574d42362a1c110600000000000000000000000000000005111d29343f495156585c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c56544f473d33271c100400000916222f3c4955626f7c8895a8968a7d7063574a3d2f232935404b5565727e8b98a4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0a197919090909090909090909090909090909090909090909195a0a5988b7f7265584c3f3225190c0000000000000000000000000000000000000006121f2c3844505c666f7c8592979e9f99938f8a86837f7c7a7673706d686663605c54534d47433c332d251d140b0100000000000714212e3a4754616d7a87949e9185786b5d67717e8a949e948b7e71685e52473d414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b8f8f84776b5e51442d22170b0000000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0005121e2b3845515e6b7884919e988b7e8b90837c777474747670665a4e4235281c0f000000000005111d2935414c565e616969696969615f574d42372b1e2935404b555d606969696969615f574d42372b1e120500000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000003101c28343f4a5465727f8c99a196887c6f62594f47434240454a545f6a76828f9c9e918478695f53463a2d21140700000c18232e39424a5153555c6975828f9c9a8d8174675a555554524d453b30251a0e02000000000000000006131f2b37434e5865727e8b989c8f82766d7985929c8f8276695e5346382d22170b000000000000000000000000000000010c18232d373f454a4b4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4a48443d352b21160b0000000714212d3a4754606d7a8796a1988c7f7265554b4034292f3845515d6775828e9ba4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a09e918583848484848484848484848484848484848484848484919da5988b7f7265584c3f3225190c000000000000000000000000000000000000000713202d3a4653606d78839197a19d949087827d7a7673706d676764615e565653504a46423b37312a211e1a140d0500000000000714212e3a4754616d7a87949e9185786b606d7a84919e988f82766c62564c4135414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926323f4c5965727f8c989185786b5e4a3f33281c0f0300000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0005121e2b3845515e6b7884919e94887b84919088838180818276695c504336291d100000000000010d1925303a444c52545c5c5c5c5c55534d453c31261a242f39434b51535c5c5c5c5c55534d453c31261a0e0200000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000b17232e3b4754616e7b86929f9b8f82756b6059534e4e4b51545c666f7c88949f9a8d807367574d42372b1e12050004101c2834404a545c6061616975828f9c9a8d817467616161615e574d42362a1e110500000000000000000815222e3b4754606a7783909d998b7e716774818e9b93877b6e61544a3f33281c0f0300000000000000000000000000000006111b242d343a3d3f424242424242424242424242424242424242424242423d3c38332b231a0f050000000713202c3945525d687884919e9c8f8275675c51453a3539414c55606d7a85929fa4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807777777777777777777777777777777777777777777c8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000005111e2a36414c5665727e8b95a09d938e827c75716d676663605d555754524c4946443f3f3d3a3936302d2a251f170f05000000000714212e3a4754616d7a87949e9185786b6a74808d969f92867b6e615a50443a30414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192633404c5966737f8c99928579665b5044382b1f120600000000000000000000000000000000000000000013202c3946535f6c7986929f96897d7063564a3d3023170a0005121f2c3845525f6b7885929e94877b7e8b9595908e8d8e86796c5f5346392c201300000000000008131e28323a4146474f4f4f4f4f4846423c332a1f141d2831394045474f4f4f4f4f4846423c332a1f14090000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000614202d3a46525e6975818e989e93897d706b625f585b545c60666d78828f9c9f93877b6e6155483c31261a0e020006121f2c3844515c666d6e6e6e75828f9c9a8d81746e6e6e6e6e695e52463a2d2014070000000000000004111d2935414b55626f7c89959f92867a6d63707d8a979a8c8073665b5044382b1f13080000000000000000000000000000000009121b23292e313236363636363636363636363636363636363636363636302f2c27211a11080000000004111d2935414c566875818e9b9f9285796d60564c4541444b535d67727f8b98a2a4978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c80736a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000714202d3946525e687783909da0958e81786f6a64605d555653514b4a4746413c4347484c494746413b3a36312921170d030000000714212e3a4754616d7a87949e918478666f7c87939f958c7f73695f53483e3234414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a2734404d5a6773808d9a9386796c605346392d20130600000000000000000000000000000000000000000013202c3946535f6c7986929c96897d7063564a3d3023170a0006121f2c3945525f6c7885929c93877a788390969d9b9a9286796c5f5346392c2013000000000000020c1620283035393a42424242423b3a37312a21180e161f282f35393a42424242423b3a37312a21180e030000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000005111e2a36424d57616e7b86929f9f92867d746e6a696868666d7078818e949f978e8174695f53463a2a1f140900000713202d3a4653606d797b7b7b7b828f9c9b8e817b7b7b7b7b7b6e6154473b2e211408000000000000000613202c3945515d6774818e9a9b8f827568606d7985929e9184786c6053463a3024190d01000000000000000000000000000000000911181d222425292929292929292929292929292929292929292929292322201c160f080000000000010d19242f3e4b5764717e8a98a2988b7f72685e56514c51555c656d7a85919ea1a9978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c8073665d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000814212e3b4754616e7a86939f9d9083786d665f5854514c494745403d3a393c464e5355585654524c4846423b33291f14090000000714212e3a4754616d7a87949d9184776d788390999a9083786d60574d42362d34414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2734414e5a6774818d9a9a877a6d6054473a2d21140700000000000000000000000000000000000000000013202c3946535f6c79878f8f8f897d7063564a3d3023170a000613202c3946535f6c79868f8f8f86796e7b848e9298969286796c5f5346392c201300000000000000040e161e25292d2e36363636362e2d2b261f180f060d161d24292c2d36363636362e2d2b261f180f06000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000020e1a25303b46535f69727f8c939f989287807b7776757576797d838e939d9791857a6e61574d42372b180e0300000815222f3b4855626e7b888888888f949f9e938e88888888888276695d5043362a1d10000000000000000714212d3a4754606d7a85929f978a7d71645c6674818e9a96897d7063564c4135291d11050000000000000000000000000000000000060c111518181c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c171614100b05000000000000000814202d3a4753606d7985929f9e91847a6d68605d555c60676d77818e919197a1978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c8073665951515151515151515151515151515155626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000916232f3c4956626f7c899aa4978b7e71665c544e4745413d3a39352f2e37434e585f626563615e5654534d453b31251a0e0200000714212e3a4754616d7a87949d908377727f8c959f93887c6f665c51453c312734414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1b2835424e5b6875818e9b94877a6e6154473b2e2114080000000000000000000000000000000000000000000f1c2935424f5c687582828282827c6f6255493c2f22160900030f1c2936424f5c6975828282828175696e7a818588898987796c5f5346392c20130000000000000000040c13191d2021292929292922211e1a140e0600040c12181d2020292929292922211e1a140e0600000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000009141f2b37424d57626d74818d939a99938d888482818283858a90959f9691857d6f685e52453c31261a060000000815222f3b4855626e7b889494949c9fa6a59e9b94949494908376695d5043362a1d1000000000000006131f2b37434e5865727e8b989e9285796d605463707d89979b8e8175685d5246392d20150a0000000000000000000000000000000000000105090b0c0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0a0907040000000000000000000613202c3945515d6773808d97a19690827a716d6769666d7179818e918585919e978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d444444444444444444444444444855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000a1724313d4a5764707d8a97ac95887c6f62544a423c39352f2d2c2929303947535f6a6f72706d6869615e574d42362a1e120500000714212e3a4754616d7a87949d9083767b86929f978d81746b60544a40332a2734414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c2935424f5c6875828f9b95887b6e6255483b2f2215080000000000000000000000000000000000000000000f1b2834414d5a656f75757575756f6a5f54473b2e22150800020f1b2834414d5a657075757575756f65686d74797b7c7c7a756154473b2e21140800000000000000000002080d1113141c1c1c1c1c1514120e090300000001070d1013141c1c1c1c1c1514120e09030000000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000000020e1a26313c45515b606c78808890959a9a96918f8e8e9092989b98928d847c6f6b60564c41332a1f14090000000815222f3b4855626e7c888f8f8f9297a1a196918f8f8f8f8f8376695d5043362a1d100000000000000815222e3b4754606a7783909d9a8d8074665c53606c7884919e92867a6d6154473c32261b0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b55616d7a8592999f9490847e7a777677797d838e938b7e83919d978a7d7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4037373737373737373737373b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000a1724313d4a5764707d8a97ab95887b6e6255483c3731323131322f353a424d57626f7c7f7d7a78766e695e53463a2d21140700000714212e3a4754616d7a87949c8f8376828f989e91847a6d60594f42392e212734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c2936434f5c6976828f9c95887c6f6255493c2f2216090000000000000000000000000000000000000000000c1925313d49545d656869696969625f584e43372b1f130600000c1925313d49545d656969696968655d5e61666d6f706f6e685e5246392d2014070000000000000000000000010507070f0f0f0f0f0807050200000000000000010406070f0f0f0f0f0807050200000000000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000009141f2a333f44505b666c737d83898d9093999696959597928f8b86807a6f6a60594f443b3021180e030000000815212e3b4854616e7b8282828285929e9e918482828282828073665a4d4033271a0d000000000004111d2935404b55626f7c8895a095887c6f6254505b6674808d9a988b7f7265584e43372b1d120700000000000000000000000105070713131313130d0c0a07020000000000000000000000000000000000000000000000000000000000000000010d18242f3946525e68707d8792999f96918b86848383858a91948e817683909d978a7e7164574b3e3124180b000714212e3a4754616d7a8794a0998c807366594d40332a2a2a2a2a2a2a2a2a2f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000916232f3c4956626f7c8999a396897d7063584e4743403f3e3e3e3f41454c545e6974808b898785827b6e6154483b2e21150800000714212e3a4754616d7a87949b8f827e8a949e948a7e71685d52463d30271c2734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2a3743505d6a7683909d96897c706356493d3023160a0000000000000000000000000000000000000000000915212c37424b545a5c5c5c5c5c55544e463c32261b0f0300000915212c37424b545a5c5c5c5c5c595452545c60626363615e564c41362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000030e182128333f4a545b606b6f767c80848688898989888785827f7a736d685f584f463d32291e0f06000000000714202d3a46525e696e75757575828f9c9a8d807575757575736e63584b3f3226190d00000000000613202c3945515d6774818e9a9d9083776a5f534a54636f7c89969d9083776a5f5447392f23180c00000000000000000002080d11131420202020201a1917130e07000000000000000000000000000000000000000000000000000000000000000007121d2a36414c56606b717e8790959a9e99929190909298928c827976838f9c978b7e7164584b3e3125180b000714212e3a4754616d7a8794a0998c807366594d4033261e1e1e1e1e1e1e222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000714212d3a4754606d7a86929f9a8d80746a5f58534e4d4b4b4a4b4c4c52565d666e7b869296979184796c605346392d20130600000714212e3a4754616d7a87949c8f8285929e988f82756c61564c41342b1e152734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e2a3744515d6a7784909d968a7d7063574a3d3024170a00000000000000000000000000000000000000000007131f2b36404a52585a5a5a5a5a55534e453c31261a0e02000004101b26303942494d4f4f4f4f4f4d49464a505355565654524c443b3025190e020000000000000000000000000000000005080a0b131313131313070604000000000001060b0e111113131313130d0c0a070200000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000060f17222d38424a505960636b6f74777a7b7c7d7c7b7a7975726d68615d564e463d342b20170d000000000005121e2a36424d575e6169696975828f9c9a8d81746969696966635c52473b2f23170a00000000000714202d3a4753606d7a85929f988b7f7265584e4653606c7884919e95887c6f62554b4034291c100400000000000000050c13191d20212d2d2d2d2d2626231f19120a01000000000000000000000000000000000000000000000000000000000000010d1925303a444f59616c717c838a8e919794959992908c867f786d75828e8f8f8b7e7265584b3f3225180c000714212e3a4754616d7a8794a0998c807366594d4033261a111111111115222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000613202c3945515d6776838f9c9f92867c6f6a625f58595858575859565d60686d78828f98a2978d8073665b5044382b1f120600000714212e3a4754616d7a87949f938692979f92867b6e615a50433a2f22191b2734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e2b3845515e6b78849196968a7e7164574b3e3124180b0000000000000000000000000000000000000000000b1723303b47525c646767676767625f574e42372b1e120600000009141e2730373d414242424242413d383f44464849494746413b32291e1408000000000000000000000000000000060c111417182020202020201413100c070100040c12171b1d1e20202020201a1917130e08000000000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000000006111c262f383f444f5459606367676d6e6f706f6e6d6c6565615e56524c443c342b22190e050000000000020e1a25303b454d52545c5c6975828f9c9a8d8174675c5c5c5a58524a40362a1f13070000000006131f2b37434e5865717e8b989f92867a6d60544744505b6573808d9a9a8d8174675c5145382c1f1409000000000000050e161e252a2d2e393939393933322f2a241c130a0000000000000000000000000000000000000000000000000000000000000008131e28323d47505a616a6f787d81858687888886837f7a726c66727f828282827e7164574a3e3124170b000714212e3a4754616d7a8794a0998c807366594d4033261a0d0404040815222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000004111d2935414b5564717d8a949f9891847c746e6a6866656464656567686d727a818f949f9f92857a6d61544a3f33281c0f0300000714212e3a4754616d7a8794a49a939a9f958b7f72695e52483e31281e101b2734414e5a6774818d9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121f2c3845525f6b7885898989897e7165584b3e3225180b0000000000000000000000000000000000000000000d1926333f4c58646e73747474746e6a5f53473a2e211408000000020c151e262c3134363636363534312e34383a3c3d3c3b3936302920170d0200000000000000000000000000000810171d2123242d2d2d2d2d2c201f1d18120b030e161d23272a2b2d2d2d2d2d2726231f19120a0200000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a00000000000000000000000a141d262d333d43484f5456555d60626363626261605b5354524c46413a322a221910070000000000000009141f29333b4246484f5c6875828f9b9b8e817468564c504f4d49423930261b1004000000000815212e3b47535f6a7783909d9b8e8175685d52453f4953626f7c88969f9285796d6053473b31251a0e0000000000020c162028303639464646464646403f3b352e261c1207000000000000000000000000000000000000000000000000000000000000020c16202c353e4850585f666c7074787a7b7b7b7a77736e6860626d7275757575716c6155493c3023170a000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c000000000000000000000000000000000000010d18242f3a4955616c76828f96a0969186817b777573727171717274767a7f848f939e9e938b7f72685e5242382d22170b0000000714212e3a4754616d7a8794a0a49fa3999083786c60574d42362c1f160c1b2734414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d7d7d7d7d7b6e6154483b2e2115080000000000000000000000000000000000000000000d1a2734404d5a677380808080807c6e6255483b2f22150800000000030c141b2125282929292929281c23282c2d2f30302e2d2a251e170e05000000000000000000000000000008121a22282d30313939393939392d2c29241d150d1820282e333738393939393933322f2a241c140a00000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000000000020b141c222832383d4348494b51535556565655545350494746413a353028201810070000000000000000020d17212930363a414e5b6874818e9b9c908376685e565d5c59544b42372c21150900000004101d2935404b55626f7c88959f96897d7063564c413847545f6a7784919d978a7e7164574d42362a1c11060000000008131e28323a41465353535353534d4b4740382e24190e02000000000000000000000000000000000000000000000000000000000000050e1a232c363e464e545b606367676d6e6f6e6d6766615e565b62656969696964615a5045392d211408000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000007131d2d3945505a616e7a8490959f98928d888481807e7e7d7e7f8183868b91969e9f938e81776c60564c412f261c11060000000714212e3a4754616d7a8794a0a3a89f92877c6f665b50453b30241a0d0e1b2734414e5a6774818d9a988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4854606b70707070706e695e53463a2d21140700000000000000000000000000000000000000000013202c3946535f6c79878d8d8d897d7063564a3d3023170a000000000002091015191b1c1c1c1c1c1b11171c1f2022232321201e19140d05000000000000000000000000000006101a242c33393d3e4646464646463a39352f271f15202a32393f43444646464646403f3b362e261c1208000000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000020a111721272c32383b3c40454748494a49484746443f3a39363029241e160e0600000000000000000000050f171f252a33404d5a6673808d999f92867a6e68696a68655d54493d3125190c0000000613202c3945515d6774818d9a9e9184786c6053463a37434e586673808c999c8f8276695e5346382d22170b000000010d1925303a444c525f60606060605957524a40352a1f13070000000000000000000000000000000000000000000000000000000000000008111a242c343c424a505357555c60616261605c5554524c5156585c5c5c5c575550483e33281c1104000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000001111c28333e46525e686e7b838c92979d9a96918e8c8b8b8a8b8c8d9092999e9d98928b81796d655b50443a301d140a000000000714212e3a4754616d7a8794969696968d80736a5f544a3f33291f12080e1b2734414e5a6774818d96968b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c38444f59606363636363615e574d42362a1e120500000000000000000000000000000000000000000013202c3946535f6c7986929a96897d7063564a3d3023170a0000000000000004090c0f0f0f0f0f0f0e060c1012131516161414110e08020000000000000000000000000000000c17222c363e45494b5353535353534745403931271d20323c444b4f5153535353534d4b4740382e24190e020000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000000000000000060b161b21272c2f2f35383a3b3c3d3c3b3a3937332d2d2a251e19130c04000000000000000000000000050d141a24313e4a5764717d8a98a2998f827a777676756f65594d4134281b0e0000000714202d3a4753606d7985929f9a8c8073665b504438323c4855626e7b88959f93877b6e61544a3f33281c0f03000005111d2a36414c565e6c6c6c6c6c6c66635c52473b2f23170a000000000000000000000000000000000000000000000000000000000000000008121a222a2f383f44464a4b515354555553514b474641454a4b4f4f4f4f4a49453e362c22170c00000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c00000000000000000000000000000000000000000c17222a36414d565e696e797f858c909597999b9998979798989a9b999a93908c857f756d675c53493f32281e0b02000000000714212e3a4754616d7a87898989898984796d60584e42382d21170d000e1b2734414e5a677481898989897f7265584c3f3225190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d474f54565656565654534d453b31251a0e0200000000000000000000000000000000000000000013202c3946535f6c7986929996897d7063564a3d3023170a00000000000000000000020303030302020000030607090a09080705020000000000000000000000000000000005111d28333e4850555760606060605f53514b43392f242933444e565c5e60606060605a58524a40362a1f13020000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000000000040a0f161b1f2224292c2d2f30302f2f2e2d2b2722201e19130d08020000000000000000000000000000020914212d3a4754606d7a86929f9f948f868383838175685c4f4235291c0f000006121f2b37434e5865717e8b989f93877b6e61544a3f332e3a47535f6a7783909d9a8c8073665b5044382b1f130800000713202d3946525e68767979797979736e63574b3f3226190c0000000000000000000000000000000000000000000000000000000000000000000810191d262d3338393d4045474848484745403b39363a3d3f424242423e3c39332c241a100500000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000815222f3b4855626e7b8895a1988b7f7265584c3f3225190c0000000000000000000000000000000000000000050e1925303b444d575e666d727a7f83878a8c8e8f90919191908f8e8c8a87837f7a726d605c554b41382d20160c00000000000713202d3a4653606d787d7d7d7d7d7d7b6e675d51463c2f261c0f05000815222f3b4855626e7c7d7d7d7d7b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16212b353d44484a4a4a4a4a4846423b33291f14090000000000000000000000000000000000000000000013202c3946535f6c79878c8c8c897d7063564a3d3023170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212d3945505a61646c6c6c6c6c6c6a5d554b403529303b455660676b6c6c6c6c6c66635c52473b2f1f14090000000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a0000000000000000000000000000000000040a0f1315181d1f20222323232221201f1b1713110d080200000000000000000000000000000000000613202c3945525d6873808d949e9f9992908f908376695d5043362a1d1000000815212e3b47535f6a7683909d9c8f8376695f5342382d2b37434e5866727f8c999e9184786c6053463a3024190d01000714212e3a4754616d7a8686868686807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000070b141c22282b2d2f34383a3b3c3b3a38342f2d2a2e31323636363631302d28221a12080000000714212e3a4754616d7a879496968c807366594d4033261a0d0000000815222f3b4855626e7b889596968b7f7265584c3f3225190c00000000000000000000000000000000000000000008141f29323b454d545c60686d72767b7d7f8283838484848383817f7e7a77726d67625b514b43392f261b0e05000000000006121f2c3844515c666d7070707070706e695f554b40342a1d140a00000814212e3a47535f6a6e707070706e695e53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f19232b33383c3d3d3d3d3d3b3a36312921170d03000000000000000000000000000000000000000000000c1926333f4c5966727f7f7f7f7f7b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4955616c7179797979797975675d5145392c36424d576772777979797979736e63584b3b30251a0e0200000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000000000000000000307070c10131415161716151413120f0b0605010000000000000000000000000000000000000004111d2935414c56606d78828b919697989897908376695d5043362a1d100004101d2935404b55626f7c88959f988b7e7164574d422f2626313c4855616e7b88959f96897d7063564c4135291d1105000714212e3a4754616d7a879393938c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f2023292c2d2e2f2e2d2c2923201e222425292929292423211c171008000000000714212e3a4754616d7a8789898989807366594d4033261a0d0000000815222f3b4855626e7b88898989897f7265584c3f3225190c000000000000000000000000000000000000000000020d172029333b424b51565e6165696e707375767777787777767473716e6865605d555145403930271d140a00000000000004101c2834404a545c60636363636363615f574d43392f22180b02000006121f2b37434e585f6263636363615e574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111921272c2f30303030302e2d2a251f170f0500000000000000000000000000000000000000000000000c1825323e4b57636d72737373736e695f53463a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e868686868687796d6053473a2d3a46525e6977848686868686807366574d42362a1e120500000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000000000000000000000000004060708090a0908070605030000000000000000000000000000000000000000000000010d19242f3a44515c666d787f84888a8b8b8a898276695d5043362a1d100006131f2c3945515d6774818d9a9f9285796d6053473b3120212d3a46535f697683909d9b8e8175685d5246392d201307000714212e3a4754616d7a87949f998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000060b0f1213181c1f20212222201f1c1814111517181c1c1c1c171714110c0500000000000713202d3a4653606d787d7d7d7d7d7b6e6155483b2e2215080000000714202d3a4753606d797d7d7d7d7d7b6e6154483b2e21150800000000000000000000000000000000000000000000050e172129303940454c5254575e61646668696a6a6b6a6a69686664615e5654514c433f342e271e150b02000000000000000c18232e39424a515356565656565655534d453c31271d1006000000020f1a26313c464e53555656565654534d453b31251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f161c2022232323232321211e1a140d050000000000000000000000000000000000000000000000000a16222f3b46515b636666666666615f574d42362a1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e586874818e93939399897d7063564a3d2f3b4754616e7b8796939393908377695e52463a2d20140700000000000000000000000000000613202c3946535f6c7986929f96897d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e2834404a545c666c72787b7d7e7e7e7d7a6e6154473b2e211408000714202d3a4753606d7985929c9a8e8174675d5145392c1f1e2a36424d5765727f8c9a9c92867a6d6154473a2e211407000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000306070c1013141515151413100c0705090b0c0f0f0f0f0b0a08040000000000000006121f2c3844515c666d70707070706e695f53473a2d2114080000000613202c3945515d676d70707070706e695e53463a2d2114070000000000000000000000000000000000000000000000050f171e272e343a4146474d525457595b5c5d5e5e5e5d5c5b595754524c4745413a3128231d150c03000000000000000007121c2730394044464a4a4a4a4a4a4846423c332a1f150b00000000000a15202a343c4347484a4a4a4a4846423b33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b10131617171717171514120e09030000000000000000000000000000000000000000000000000006121e2a3540495157595959595955534d453b31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a7885919e9ea1998d807366554c41353e4b5764717e8a97a19ea095877b6e6154483b2e23180c00000000000000000000000000000613202c3946535f6c7986929c96897d7063564a3d3023170a000000000000000106090b0c0c0c0c0c08070502000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e39424a545b6065696e70717171706e685e5246392d201407000b1825323e4b5865717e8b8f8f8f897c6f62554b4035291d1a26313b4754616e7b878f8f8f8b7f7265584c3f3225190c000714212e3a4754616d7a8794a0998c807366594d4033261a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060708090807060400000000000003030303000000000000000000000004101c2834404a545c606363636363615f574d42372b1e120600000004101d2935404b555d606363636363615e574d42362a1e1205000000000000000000000000000000000000000000000000050c151d23283035393b4246484a4c4f505051515150504e4c4a4746413b39352f281f18120b03000000000000000000000b151e272e34383a3d3d3d3d3d3d3b3a37312a21180d030000000000030e18222a31373a3b3d3d3d3d3b3a36312921170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a0a0a0a0a08070502000000000000000000000000000000000000000000000000000000020d18232e3740464b4c4c4c4c4c4846423b33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c88979791979d908376675d514539414c566774818e9a979197988b7e7165544a4034281c1004000000000000000000000000000613202c3946535f6c79868f8f8f897d7063564a3d3023170a000000000000060d12161819191919191514120e0903000000000000000000000000000000000000000000000000000000000000000000000000000007121c273039424a5053575f616465656463615e564c41362a1e1105000d1a2633404d596673808282828281746a605443392f241814202d3a46525e697480828282828073665a4d4033271a0d000714212e3a4754616d7a8794a0998c807366594d4033261a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424a5153565656565655534d453c31261a0e02000000010d18242f39434b5153565656565654534d453b31251a0e0200000000000000000000000000000000000000000000000000030b12181e25292d30363a3b3d40424344444544444341403e3b3936302c29241e160d07000000000000000000000000030c151c23282c2d3030303030302e2d2b261f180f0600000000000000060f1820262b2e2f303030302e2d2a251f170f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c252e353b3e3f404040403b3a36312921180d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b5566727f8c999185919892867a6d6054473a46525e687784919d9185919b8f8275665c5144382c1f120600000000000000000000000000020f1c2935424f5c687581828282827c6f6255493c2f22160900000000010911181e2224252626262622211e1a140e0600000000000000000000000000000000000000000000000000000000000000000000000000000b151e272f383f44464d5355575858575654524c443b3025190e02000c1925323f4b57636e7375757575746f64584e4331271d12111e2a36424d57646e7475757575736e63584b3f3226190c000714212e3a4754616d7a8794a0998c807366594d4033261a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c2730394044464a4a4a4a4a4847423c332a1f1509000000000007121d2831394045474a4a4a4a4a4846423b33291f140900000000000000000000000000000000000000000000000000000000070c13191d20252a2d2e313335363737383737363533312e2d2a25201d19130c040000000000000000000000000000030b12181c1f2023232323232322211e1a140e06000000000000000000060e151a1f21222323232321211e1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c232a2f3233333333332e2d2a261f180f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6776838f998d808692998a7d7063574a3d4754616e7a8796968c7f8c999285796d6053463a2d20130900000000000000000000000000020f1b2834414d5a656f75757575756f6a5f54473b2e2215080000000009131b23292e3132323232322e2d2b261f180f0600000000000000000000000000000000000000000000000000000000000000000000000000030c151d262d33383c4246484a4b4b4b494746413b32291e140800000a16232f3b47525b63666969696968645d53463d321f150b0e1a25303b45525c64676969696966635c52473b2f23170a000714212e3a4754616d7a8794a0998c807366594d4033261a0d0a0a0a0a0a0a0a0a0a0a0a0a0a08080602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3d3d3d3d3d3b3a37312a21180e030000000000010c161f282f35393a3d3d3d3d3d3b3a36312921170d03000000000000000000000000000000000000000000000000000000000002080d11141a1e2021242628292a2b2b2b2a2928262421201e1914110d08010000000000000000000000000000000000070c1012131717171717171514120e09030000000000000000000000030a0f121415171717171514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a12181e2225262626262622211e1a140d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8692968a7d82909a8d807367564c414a5764717e8a9791847b879698897c706356493d30251a0e02000000000000000000000000000c1925313d49545d656869696969625f584e43372b1f130600000006111b252d343a3e3f3f3f3f3f3b3a37312a21180e0300000000000000000000000000000000000000000000000000000000000000000000000000030b141c22282b31373a3b3d3e3e3e3d3b3936302920170d02000007131e2a3540495257595c5c5c5c5b59534b41342b210d0309141f2933404a52585a5c5c5c5c5a58524a40352a1f1307000714212e3a4754616d7a8794a0998c807366594d4033261a17171717171717171717171717171514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d30303030302e2d2b261f180f0600000000000000040d161d24292c2d30303030302e2d2a251f170f0500000000000000000000000000000000000000000000000000000000000000000105090e12141517191c1d1d1e1e1e1d1d1b19171414110d0804010000000000000000000000000000000000000000000406070a0a0a0a0a0a08070502000000000000000000000000000000020608080a0a0a0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d12161819191919191514120e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a9996877a7f8c99908377685d52464c566774818d9a8e817884919a8d807367574d42362a1e1205000000000000000000000000000915212c37424b545a5c5c5c5c5c55544e463c32261b0f030000010d18232d373f464a4c4c4c4c4c4846423c332a1f14090000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f262b2d2e31323231302e2d2a251e170e05000000020e19242e3740474b4d4f4f4f4f4e4d4841392f22190f00020d17202f3840474c4d4f4f4f4f4d4b4740382e24190e02000714212e3a4754616d7a8794a0998c807366594d40332623232323232323232323232323232322211e1a150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f20232323232322211e1a150e06000000000000000000040c12181d2020232323232321211e1a140d05000000000000000000000000000000000000000000000000000000000000000000000000020507080a0d0f101111121111100e0d0b080705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0c0c0d0d0d0d0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e2b37424d576774818d9a9184777c899893867a6d615447525e68778491988b7e75828e9b908477695e52463a2d2014070000000000000000000000000007131f2b36404a52585a5a5a5a5a55534e453c31261a0e02000006121e29343f495156585959595955534d453c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f141a1e2122242525242321201e19140d05000000000007121c252e353b3f404242424241403c372f271d10070000050e1d262f363c3f4142424242403f3b352e261c120800000714212e3a4754616d7a8794a0998c807366594d4033303030303030303030303030303030302e2d2b261f180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c10121317171717171514120e0903000000000000000000000001070d10131417171717171514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f697784919b8e8175798592998a7d7064574a54616d7a879597887b727e8b9895877b6e6154483b2e23180c000000000000000000000000000b1723303b47525c646767676767625f574e42372b1e120600000916222e3a46515b626565656565615f574d42372b1e1205000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12141517181818161414110e0802000000000000000a131c242a2f3233363636363534302b251d150b000000000b141d242b3033343636363633322f2a241c140a0000000714212e3a4754616d7a8794a0998c807366594d403d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3b3a37312a21180e03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0a0a0a0a08080602000000000000000000000000000000010406070a0a0a0a0a080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e1011131313130c0b090601000000000000060b0e1011131313130c0c0a06020000000000000000000000000105070712131313130f0e0c09040000000000000000000406071113131313120807050100000000000000000000000000000000000000000000000815222f3b4855626e7b8896988b7e7275828f9a8d807467564c5764717d8a979285786e7b8896988b7e7165544b4034281c10040000000000000000000000000d1926333f4c58646e73747474746e6a5f53473a2e21140800000b1824313e4a56626d72727272726e695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0b0b0b0a08070502000000000000000000010a12191e23252629292929282724201a130b0300000000020b13191f242627292929292726231f19120a020000000714212e3a4754616d7a8794a0998c807366594d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4847423c332a1f15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b12171b1d1e20202020191816120d07000000040b11171a1d1e20202020191816120d0700000000000000000002080d1113141f202020201c1b19151009020000000000070c1013131e202020201f1414110d0802000000000000000000000000000000000000000004101c2834404b5565727f8b9897887b6e727f8c98908477685e52566774808d9a8e82756a7884919b8f8275665c5145382c1f13060000000000000000000000010d1a2734404d5a677380808080807c6e6255483b2f22150800000c1925323f4c5865727f7f7f7f7f7b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e1316191a1c1c1c1c1b1a18140f090100000000000001080e13171a1a1c1c1c1c1a1917130e0800000000000714212e3a4754616d7a8794a0998c807366595656565656565656565656565656565656565655534d453c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e161d23272a2b2d2d2d2d2525221e18110901050e161d22272a2a2d2d2d2d2625221e18120a01000000000000040c13191d20212b2d2d2d2d292825211b140c030000030b12181c1f202b2d2d2d2d2c21201e19140d050000000000000000000000000000000000000006131f2c3845515c6775828f9c918578696f7c889793867a6d61545d68778490988b7e726875818e9b9285796d6053463a2d20130900000000000000000000000613202c3946535f6c79878d8d8d897d7063564a3d3023170a0006131f2c3946525f6c79868c8c8c8a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070a0c0d0f0f0f0f0e0e0c08030000000000000000000003070b0d0e0f0f0f0f0d0c0a07020000000000000714212e3a4754616d7a8794a0998c8073666363636363636363636363636363636363636363615f574d42372b1e12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1720282e3336373939393932312e29231b13090e1720272e3336373939393933322f2a231c130a0000000000040e161e25292d2e38393939393534312c261e150c00030c151d23282c2d3739393939382e2d2a251e170e050000000000000000000000000000000000000713202d3a4653606d7985929b8e8175686c7885929a8a7d716457616d7a869396887b6e64717e8b9798897d706356493d31251a0e02000000000000000000000613202c3946535f6c7986929a96897d7063564a3d3023170a0006131f2c3946525f6c79859298978a7d7064574a3d3124170a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80737070707070707070707070707070707070707070706e695f53473a2d21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b16202932393f4344464646463f3e3a342d251b1116202932393f4344464646463f3e3a352e251c1207000000020c1620283035393a454646464642413d3730271e12080b151e272e34383a4446464646453b3936302920170d0200000000000000000000000000000000000a1723303d4a5663707d8998988b7e72656575818e9a8d8174675664707d8a9a91847869616e7b87969a8d807367574d42362a1e1205000000000000000000000613202c3946535f6c7986929996897d7063564a3d3023170a0006131f2c3946525f6c7985929f978a7d7064574a3d3124170e0e0d0b0906050300000000000000000000000000000000000000000000000000000000000000000000000001040707090b0c0d0e0e0d0c0b09070704010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09b8e817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7b6e6155483b2e2215080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d28323b444b4f51535353534c4a463f372d23181d27323b444a4f51535353534c4b463f372e23180d02000008131e28323a41464752535353534f4d49423930241a0e121d2730394045465153535353524746413b32291e14080000000000000000000000000000000005121e2a36424d576773808d9a97887b6e6265717e8b98918477695e6774808d9a8e8175685e697784919d918477695e53463a2d211407000000000000000000000613202c3946535f6c79878c8c8c897d7063564a3d3023170a0006131f2c3946525f6c7985929f978a7d7064574a3d31241a1a1b1a181513120f0b06000000000000000000000000000000000000000000000000000000000000000306080d1113141618191a1a1a1a1918161413110d0806040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09e938e898989898989898989898989898989898989898989898073675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e39444d565b5e60606060585651493f34291e222e39444d555b5d60606060595751493f352a1e120600010d1925303a444c52545e606060605c59544b42362c201718232e39424b51535e606060605f54524c443b3025190d010000000000000000000000000000000714202d3a46525e697784919d9185786a5f616e7b879696877b6e6168778390988b7e7165576774818e9a95877b6e6154483b2e23180c00000000000000000000000c1926333f4c5966727f7f7f7f7f7b6e6155483b2e2215080006131f2c3946525f6c7985929f978a7d7064574a3d3124262727272522201f1b17110c07000000000000000000000000000000000000000000000000000000060b0f1213191d20212325262727272726242321201d191313100c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a59e9b9696969696969696969696969696969696969696968d8073675a4d4034271a0d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1b27333f4b565f676a6c6c6c6c65625b51463a2e2227333f4a555f676a6c6c6c6c66635b51463a2f22160a0005111d2935414c565e616b6c6c6c6c68655d54483e32291e1e2834404b545c606a6c6c6c6c6b615e564c41362a1e11050000000000000000000000000000000815212e3b4854616e7b87959b8e817568575e69778491978a7e71646d7a869396887b6e615764717e8a97988b7e7265554b4034281c1004000000000000000000000c1825323e4b57636d72737373736e695f53463a2d2114070006131f2c3946525f6c7985929f978a7d7064574a3d313133343433322f2d2b27221b18120b030000000000000000000000000000000000000000000001070c11171c1f2024292c2d303233333434333331302d2c2924201f1c18120f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a59e9b9797979797979797979797979797979797979797978d8073675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2a36434f5b67717779797979726d62564a3e31252a36434f5b67717779797979726d63574b3e3225180c000713202d3946525e686d7879797979756f655a50443a302526303845515c666d7779797979786e685e5246392d201407000000000000000000000000000003101c28343f4a5465717e8b98988b7e726558576774818e9a8e817467707d8a99918478695f54616e7a87959c8f8275675c5145382c1f1306000000000000000000000a16222f3b46515b636666666666615f574d42362a1e12050006131f2c3946525f6c7985929f978a7d7064574a3d3b3e404141403e3c3937332d28231d150c060000000000000000000000000000000000000000030b12181c22282b2d3035393a3c3e3f404141403f3e3c3a3935302d2c28231d1a150e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09e938f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8073675a4d4034271a0d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784868686867f7265584c3f32252a3744515d6a7783868686867f7266594c3f3326190c000714212e3a4754616d7a858686868681756c61564c41362a2e38424e58606d788386868686857a6e6154473b2e211408000000000000000000000000000006121f2b3844505c6675828e9b97887b6e62555764717d8a9a9184776973808d9a8e81746857525e687784909d9285796d6053463a2d2013090000000000000000000006121e2a3540495157595959595955534d453b31261a0e020006131f2c3946525f6c7985929f978a7d7064574a47484b4d4d4e4d4b4846443f38342e271e180f06000000000000000000000000000000000000060d151d23292d3338393d414547494b4c4d4d4d4d4c4b494745413d3a38342e2b26201a150c07000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09b8f817e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a77849193938b7f7265584c3f32252a3744515d6a77849093938c7f7266594c3f3326190c000713202d3946525e68707d8a9293938a7e71685e52463e32343f4a545f6a73808c9593938a7d70685e5246392d20140700000000000000000000000000000713202d3a4653606d7985929e9285786a5f5354616d7a879396877b6e778390978b7e7164584c566774808d9a98897d7063564a3d31261a0e02000000000000000000020d18232e3740464b4c4c4c4c4c4846423b33291f1409000006131f2c3946525f6c7985929f978a7d7064574d535557595a5a5a5855535049454039302a21180f06000000000000000000000000000000030a11171f272f34383f4446494c52545658595a5a5a5a59575654524c4a4645403937312b262018120b0300000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80737171717171717171717171717171717171717171716f6a5f54473b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0005111d2935414c56616b74818e969e92857a6d615a50443a3844505c666f7c87929f968e81746c61564c41362a1e11050000000000000000000000000000091623303c4956636f7c89979b8e827568584e525e68778390978a7e717a869296877b6e61544a5764707d8a999a8d807367574d42362a1e12050000000000000000000007121c252e353b3e3f404040403b3a36312921180d03000006131f2c3946525f6c7985929f978a7d706457575f6264666767666562605b53514b423c332a21180d0300000000000000000000000000040c151c2328313940454a505356565d6063656666676766666463605d565753514b47433c373128231d150c06000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073666464646464646464646464646464646464646464625f584e43372b1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00010d1925303a444f59606d79849199978e81756c61564c41424e58606d78839099999184796d605a50443b3025190d010000000000000000000000000005111d2a36414c566673808c99988b7e7265584b4c566773808d9a8e81747d8999918477695e524754606d7a86939d918477695f53463a2d21140700000000000000000000000a131c232a2f3233333333332e2d2a261f180f0600000006131f2c3946525f6c7985929f978a7d70646065696e7173747473716f6c65605c544d453c332a1f150b010000000000000000000000040d161e262e343d434b51545b606367686d6f71727374747372716f6d686764605c55534e47423c342e271e180f070000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366595757575757575757575757575757575757575755544e463c32261b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000008131e28323e45515d676f7c87929f938a7e71685e52464a545f6a737f8c959f92877c6f675d51473e32291e140800000000000000000000000000000713202d3946525e687783909d97887b6e6255484a5763707d8a99918477808c998e817467574d45525d687783909d95887b6e6155483b2f23180c0000000000000000000000010a12181e2225262626262622211e1a140d060000000006131f2c3946525f6c7985929f978a7d70666d72777b7e808081807e7c78726d665f574d453c31271d120700000000000000000000030c161f2830383f444f555c60666c7074777a7c7e7f808080807f7e7c7a7774706d67625f58534e454039302a2119110700000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4947433c342a20150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000020c16202935404b55606a73808d959e91857a6d61594f505b666e7c86929f958c80736a60554b40352c20170d0200000000000000000000000000000714212e3a4754616d7a87939e9285786a5f53474753606d7a869293867a828f978a7e7164574b414c566673808d99988b7e7265554b4034291c1004000000000000000000000000070d12161819191919191514120e0903000000000006131f2c3946525f6c7985929f978a7d706e787f84888a8c8d8d8d8b88847f796e695f574d43392f23180c020000000000000000000b151e283139424a505960676d72787d808487898b8c8d8d8d8d8c8a898684817d79746e6a625f57514b433c332b23190f05000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3c3b37322a22190e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000040e18242f39434e58606d78839098978e81756b615657606c78839098989083786d60584e433a2f231a0e050000000000000000000000000000030f1b27333f495364717e8a9a9b8e827568584e4345515d677683909a8a7d859295877a6e6154473d4a5663707d89999c8f8275675c5145382c1f13060000000000000000000000000002060a0c0c0d0d0d0d080705020000000000000006131f2c3946525f6c7985929f978a7d707b838b919697979799999896918b837b6e695f554b4034291e1308000000000000000007121c273039434b545c606b70797e84898d9196969899999a9a9999979a93918e8a85817b756e6a605c554e453d352b21170d030000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4033313131313131313131313131313131312f2e2b2620191007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000007121d28313d44515c666f7c86929f938a7d70685d5f69727f8c959f92867b6e665c50463d31281d110800000000000000000000000000000005121f2b3744505b6575818e9b988b7e7265584b3f404b5566737f8c998e818e97918477685e52463a4753606d7a86929f9285796d6053473a2d20140900000000000000000000000000000000000000000000000000000000000000000006131f2c3946525f6c7985929f968a7d7b859095918d8b8a8b8c90959e9e9590857b6e675c51453a3024190d01000000000000040d18232e39424b555d666d747d848b91969a9e9c989694989292999496989b9d9a98928e87827b736d675f574f473d33291f14090000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d40332624242424242424242424242424242422221f1b150e0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000010c161f2834404a545f6a727f8c949e91847a6d60656e7b86929f948b7f72695f544a3f342b1f160c000000000000000000000000000000000613202d394653606c7885929e97887b6f6255483c3c4956636f7c89989286929a8d817467564c413945515d677683909c98897d7063564a3d31261a0e02000000000002080d101213131313130a0a08040000000000000000000000000006131f2c3946525f6c7985929f978a7e8390918a84807f7d7e7f83899196a0979183796d60564c4135291d11040000000000010c161f2834404a545d676d78808991969e9f99938f8c89878685868687898b8e92979b9f9a938f8780796e6a60594f453b31251a0e0200000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4033262424242424242424242424242424242421201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000040d18232e39424e58606c77828f97968e81746b6c77829098978f82756d62574d42382e22190d04000000000000000000000000000000000916222f3c4955626f7c88979e9285796c605346393a4653606d7985929892989a8a7d7164574a3e35404b556673808c999a8d807467574d42362a1e120500000000060d14191c1f1f20202020171614100b05000000000000000000000006131f2c3946525f6c7985929f9b8f828f91847d777472717173777d849197a0958c8073685d5245392c201308000000000008131e28313a44515c666d79828d929e9f99928d87827f7c7a797979797b7c7e8185898e92999f99928d837c6f6b60574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403330303030303030303030303030303030302e2d29251e160e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000007121c27303c44505b656e7b85929f93897d70727f8b949e92857a6e615b51453c30261c10070000000000000000000000000000000003101c28343f4a5466727f8c999b8e8275655b5044373844505c6675828f9c9c9c93867a6d6154473a2f3c4956636f7c89989c918477695f53463a2d2114070000000810181f25292b2c2d2d2d2d2423201c1710080000000000000000000006131f2c3946525f6c7985929f9e938f91847a706c67656464666b707b85929e9f92857a6d6054473a2f24190d01000000010d19242f3a43505a606d78828f949d9e959086807b76726f6e6c66666d6e6f7275797c81868e939e9f9590857d6f695e53463a2d21140700000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a3935302820160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000b151e27333f49535e69717e8b939e9184797b86929f938a7e70685e52493f332a1e150a000000000000000000000000000000000006121f2c3844505c6676838f8f8f8b7f726553493f33343f4a5465727f8c8f8f8f8f8377685e5246392d3a4653606d79868f8f8f887b6e6155483b2e221508000006101a222a303538393939393931302d28221a110800000000000000000006131f2c3946525f6c7985929fa59f93877c6f68615a585758596069717e8a96a0988b7f7265564c4135291d110400000004111d2935414c55616c74818e949e9e938f837b746e69656361605b5c60616365666c70757b818a9297a09792867b6e6154483b2e21150800000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4746413a32281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000030c17222d38414d57616c75818e97968e81828f98968e81746c61564c41372d21180c0300000000000000000000000000000000000713202d3a4653606d7881828282827b6e6155483b2d2e3b4855626e7b82828282827f7265564c41362c3845515c667380828282827d7063564a3d3023170a00020d18222c343b414446464646463d3c39332c231a1005000000000000000006131f2c3946525f6c7985929faa9b8e81756a5f56504c4a4b4f57606d7884919e9c908376685d5245392c2013060000000613202c3945515d67717e8a939d9f948f81796e6a615e575654535050535456545b6063696e757d859299a298887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80736659575757575757575757575757575757575757575754524c443a3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000006111b262f3b45505a616d7a85919e928e8f94999184796d605a50443b30251b0f0600000000000000000000000000000000000006121f2c3844505c666d75757575756e695f53473a2d2e3a47535f696e7575757575726d6256443a302834404b54636e7375757575706b6054483c2f2216090008141f2a343e464d5152535353534a49443e362c22170b000000000000000006131f2c3946525f6c7985929fa298897d7063584e443f3e3e44505c6673808d9a9f92867a6d6054473a2d211407000004101d2935404b55606d7a85919ea1978f82786d675f57524d49474644444648494a5053575e616b707b87929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366636363636363636363636363636363636363636363615e564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000a141d29333e46525e68707d8a929d9a9c9f93877d6f675d51483e32291e13090000000000000000000000000000000000000003101c28343f4a545c606869696969615f574d42372b2b37424d575f62696969696965625b51463228232e3942525c6366696969696360594f44382c201307000d1925303b4650585d5f60606060575550483e33281c10040000000000000006131f2c3946525f6c7985929f9f9285796d6053463c3231343f4a5463707d8a96a399897d706356493d3023160a00000613202c3945515d6773808d97a19e91857a6d665c554e46423c3b3938383a3b3c3f44464d535961697986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073707070707070707070707070707070707070707070706d685e5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000020b17212a36414c56616b74818e9aa7a49a8d80736b60554b41362c20170d0000000000000000000000000000000000000000000c17232e38424a50535c5c5c5c5c55534d453c312626313c454d53555c5c5c5c5c585651493f34201d2730404a52585a5c5c5c5c56544f473d33271c100400101c2935414d5862696c6c6c6c6c64615a5044392d2014080000000000000006131f2c3946525f6c7985929f9c8f8376665c5144382a232e3a4754616d7a8798a2988c7f7265594c3f3226190c00000714202d3a4753606d7985929f9f94897d70685e544b433c36302d3338393a3a3a3a3a3b42464f576c7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09b8e817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000000008131e28323a45515d67707c8996a39f93867b6e655b50443c30271d120700000000000000000000000000000000000000000006111c2630383f44464f4f4f4f4f4847423c332a1f202a333c4247484f4f4f4f4f4c4a463f372d23151e2e3840474b4d4f4f4f4f4a48443d352b21160b0000121f2b3844515d69747979797979706c6155493c3023160a0000000000000006131f2c3946525f6c7985929f9a8d817467544a403428202d3946525e687985929f9a8d8174675a4e4134271b0e0004111d2935414b5565727e8b97a29c8f82766b61564c4239312a2f383f44464747474747474747535f6c7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09e938e8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a897d706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988b7f7265584c3f32252a3744515d6a7784909d998c7f7266594c3f3326190c000000000000000000050f1925303a444f59606d7984919d9d9e9a8f82776c60584e43392e23180d040000000000000000000000000000000000000000000a151e262e34383a42424242423b3a37312a211818212a31373a3b42424242423f3e3a342d251b0c1c262e363b3f40424242423d3c38332b23190f050000131f2c3946525f6c7986868686867d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f988c7f7265594c3f2e231d2a36414c566a7784919d9b8f8275685c4f4235291c0f000613202c3945515d677683909ca0968a7d7063594f443a30272d38424a50535353535353535353535f6c7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a59e9b96969696969696969696969696969696969696969696897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d988c7f7265594c3f32262a3744515d6a7784909d998c7f7266594c3f3326190c0000000000000000020b17212a36414c56616b74808d9695909197948c7f726a5f554b4034281f160c010000000000000000000000000000000000000000030c151c23282c2d35363636362e2d2b261f180f0f1820262b2e2f363636363632312e29231b130a141c242a2f323336363636302f2c2721191108000000131f2c3946525f6c79859293938a7e7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f988b7e7165584b3e322519253043505d6a7683909d9c908376695d5043362a1d10000714212d3a4754606d7a86929f9d9184786c6053463d322928333f4a545b60606060606060606060606c7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87949696969696969696969696969696969696969696969696969696897c706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d998c807366594d402f242a3744515d6a7784909d998c7f7266594c3f3326190c00000000000000000a141d29333b46525e68707d8a9299908385919e92867c6f675c51453d31281e1308000000000000000000000000000000000000000000030a11171c1f20292929292922211e1a150e06060e151a1e212229292929292524221e181109020a12191f232627292929292322201c160f0800000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f978a7e7164574b3e31241d293643505c6976838f9c9d9083776a5d5044372a1d11000a1724313d4a5764707d8a99a39a8d8073655b5044372c202b3844505b666c6d6d6d6d6d6d6d6d6d6d6d7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87898989898989898989898989898989898989898989898989898989897d706356493d3023160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9a8d817467554b4035292b3744515e6a7784919d998c7f7266594c3f3326190c0000000000000006111c262f3b45505a616d7a85919e93877c7e8a94989083796d60594f433a2f24190f0500000000000000000000000000000000000000000000060c1012131c1c1c1c1c1514120e0903000003090e1214151c1c1c1c1c191815120d06000000080e1317191a1c1c1c1c171613100b050000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f978a7d7064574a3d31241c2936424f5c6975828f9c9d9084776a5d5144372a1e11000d192633404c5966737f8c99a9978a7d716453493f3327202d394653606c78797a7a7a7a7a7a7a7a7a7a7986929f95887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9c908376675d5145392f2a36414c566b7884919e988c7f7265594c3f3226190c000000000000030d17222d38424d57626c75818f97968d807475828f98958d80736b60564c41352921170b0200000000000000000000000000000000000000000000000306070f0f0f0f0f08080602000000000000020608080f0f0f0f0f0c0b090601000000000002070a0d0d0f0f0f0f0a09070400000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f978a7d7164574a3e31241c2936424f5c6975828f9c9d9184776a5e5144372b1e11000f1b2835424e5b6875818e9ba297877a6e6154473b2d2224303d4a5763707d8686868686868686868686868b98a395887c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c666d70707070707070707070707070707070707070707070707070707070706d685d5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9f92867a6d60554b4038353946525e687985929f988b7e7165584b3e3225180b0000000000010b151f28333f4a545e69717e8b939e9184796d6e7b86929f93887d70685d52453e33291d140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f978b7e7164584b3e31251d293643505c6976838f9c9d9083776a5d5044372a1d1100111d2a3744505d6a7783909d9e928578685e5246392d1b24303d4a5763707d8a93939393939393939393939fa3aa95887c6f6255493c2f221609000000000000000000000000000000000000000000000000000000000000000004101c2834404a545c606363636363636363636363636363636363636363636363636363636363615d564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919da3988b7e71675d514a4541424754616e7a8798a2978a7d7164574a3e3124170b000000000007121d27313944505b666e7b86929f938a7d706769727f8b959a91847a6d605a50453b2f261b11060000000000000000000000000000000000000001040607090b0d0d0e0e0d0c0b08060603000000000000000000000000000000000000000002060a0c0c131313131308070502000000000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f988c7f7265594c3f32261c28343f4a546a7683909d9c908376695d5043362a1d1000121e2b3845515e6b7884919e9e9184776b564c41362a1e24303d4a5763707d8a969b9b9b9b9b9b9b9b9b9b9b9b9b95887c6f6255493c2f2216090000000000000000000000000000000000000000000000000000000000000000000c18232e39424a5153565656565656565656565656565656565656565656565656565656565654524c443a3024190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919da79e9184796d605c54524c4d535a64707d8a97a399887c6f6255493c2f22160900000000040e18232f39434e58606c78829098978e81756b61606c78839099968e81756c61574d41382d22170c030000000000000000000000000000000004070d1113141618191a1a1a1a19171513120f0b060000000000000000000000000000000000070d1216181920202020201514120e090300000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f9a8d8073675a4d4031261f2c3844505c667884919e9b8f8275685c4f4235291c0f00121f2c3845525f6b7885929e9d9083766a5d504330251924303d4a5763707d8a8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e887c6f6255493c2f22160900000000000000000000000000000000000000000000000000000000000000000007121c2730394044464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4746413a32281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9f95908d80746d66605d56575e616c76828f9c9f9286796d6053463a2d201307000000020c16202934404b555f6a727f8c949e92857a6d61595b666f7c87929f938a7e71695e53493f33271e150b0000000000000000000000000001070c1013181d202123252627272726262422201f1c17110f0a04000000000000000000000000010a12181e2225262d2d2d2d2d22211e1a140e06000000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f9c8f827569584e43372b202d3a4653606d7986929f9a8d8174675a4e4134271b0e00131f2c3946525f6c7985929f9c8f8276695c4f4336291c222f3c4955626f7c81828282828282828282828282828282817b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a3935302820160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111e2b3744515e6a7784919d9d9083908d8078716d686a6a696e737e8b949f9c908376675c5145382c1f130600000008131e28323a45515c676f7c87929f948b7e71685e52545f6a73808c969f92857b6e655b50443c30271d12070000000000000000000000030b12181d1f24292c2d2f31333334343332312e2d2b28221c1b160e0903000000000000000000000a131c232a2f323339393939392e2d2b261f180f060000000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f9e9184786a5f53473a2f292d3b4855616e7b8899a3988c7f7265594c3f3226190c00131f2c3946525f6c7985929f9c8f8376695c504336291d212e3b47535f6a6f75757575757575757575757575757575756e695e53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d30303030303030303030303030303030303030303030303030303030302e2d29241e160e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2b3844515e6b7784919e95897c84918d837e7a787777787b8088939fa0958b7e7164554b4034281c10040000010d1924303a444f59606d79839199988f82766c61564c4e58606d7984919a978f82776c60584e43392e23180c00000000000000000000090d151d24292c2f35393a3c3e40404141403f3e3b3938332d2c27211a140e06000000000000000007121c252e353a3e3f46464646463b3a37312a21180e0300000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929fa196887b6f62564c41383538424d5765717e8b98a399897d7063564a3d3023170a00121f2c3945525f6c7885929f9d9083776a5d504431261a1f2b37434e585f626868686868686868686868686868686868615e574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f20232323232323232323232323232323232323232323232323232323232321201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2b3845515e6b7884919e94887b7d8792918a8684838485878d939aa0989184796d6053473a2e23180c00000004111d2935414c56606b74808d959f92867b6e615a504445515c67707d88939f948c7f726a5f554b4034281c100400000000000000020b121b1f272f35393a414547494b4c4d4d4d4d4c4a4846443f3838322a261f180f07000000000000020d18232e373f464b4c53535353534846423c332a1f140900000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929fa9998d8073685d524945414449525e6975818e9b9f92867a6d6054473a2d21140700121e2b3845515e6b7884919e9e9184786b574d42372b1e1b26323c464e53555b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b54534d453b31251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000070c10121317171717171717171717171717171717171717171717171717171717171413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3845525e6b7885919c94877a717e8791969291909092979a9f9c9691867c6f675c5145382c1d12070000000713202c3945525d68707d88939c958c7f72695e53483e404b55606b74818e979c92867c6f675c5145382c1f1306000000000000010b141d242d31394045474b51545658595a5a5a5959575553504a48433d36312a21191007000000000006121e2a353f49515759606060606055534d453c31261a0e02000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929fa99e92857a6d605b53524c50535b616e7b86929f9d908376685d5245392c20130700101d2a3643505d697683909c9f928578695f53473a2d2115202a343c4347494f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4846423b33291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000406070a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a07070501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2c3845525f6b78858f8f8f867a6d717d848b8f929996969598928f8b847c6f6a5f554b4034291c0b000000000714212d3a4754606d7a848f8f8f8f83786c60574d423639434f59606d7a858f8f8f8f83796d6053463a2d2013070000000000000a131d262f363e434b5153555d6062646666676766656461605b54544f46423b332b22190f06000000000a16222f3a46515b63666c6c6c6c6c6c5f574d42372b1e1205000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929fa197928e81746c65605d565c60656c74818e99a2978b7f7265564c4135291d1104000f1b2835424e5b6875818e9ba298887b6e6155483b2e231818222a32373b3c42424242424242424242424242424242423b3a36312921170d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1c2935424f5c6875818282828275676b6f797e8286888989898885827e786f6a5f584e43392f23180c000000000b1825323e4b5865717e82828282827c6f665b50453b31303d45525d68707d82828282827d7064574a3d3124170a000000000006101c252f38414850555d6065676d6f71737374747372716e6c66636059534d453d342b21180e030000000c1825323e4b57636d72797979797976695f53463a2d211407000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f9e9285928d8078716d686a666d70777f8c939e9f92857a6d6054473a2f24190d01000c1926333f4c5966727f8c99aa978b7e7164544b4034281b111820262b2e2f353535353535323a4145474946443f3a3935302a251f170f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1b2834414d59656f75757575756f6560676d7176797b7c7c7c7b7976716d665f584e463c31271d1207000000000b1724313d4a56626c7175757575756f6a5f544a3f33292935414c56616b707575757575706c6155493c3023160a00000000030e18222e37414a535a62676d72767a7c7e7f808080807f7d7b79746f6b615f574f473d332a2015090000000c1926333f4c5966727f86868686867b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006131f2c3946525f6c7985929f988b7e87928d837e7a787778797d828c919c9f948c7f72685d5245392c1e130800000a1723303d4a5663707d8998a29a8d8174665c5145382d22170f151b1f21222828282824303a444c52545653504a4746413a322920170c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925313d49545d656869696969655d555c6065666d6e6f706f6e6d6664605c544e463c342a1f150b01000000000915212e3a45505a62656969696969625f584e42382d21242f3a444f596163696969696964615a5044392d201408000000000a15202a344049535c646c71797f8386898b8c8d8d8d8c8c8a8885817c756e6960594f453c31261a0e0400000c1926333f4c5966727f8c939393887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000006121f2b3844505b667986929f95887c7f8c93908a8785848486898f949c9f958f82786d60564c4135291d0c0100000714202d3a4753606d7986929f9e9285796d6053493f3327211913111315161c1c19212935414c565d6063605c5454524c443a32291e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915212c37424b54595c5c5c5c5c5a544b5153545c606263636261605c5453504a423c342a22190d03000000000005111d29343f485056585c5c5c5c5c55534e463c2f261c1e28323e474f55575c5c5c5c5c575550473e33281c1004000000030f1a26313c46515b646e747e858b909299979999989899989797928e89827b6f6b60574e42372b20160a00000c1926333f4c5966727f8c999f94887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000613202d394653606c7986999c94887b77818c92999791919192999c9d99928d82796d665c50433a2f24190d00000006131f2c3845515d6775828f9ca1978a7e71655b50443c332925201d191c191d202429333c45525d686d706d6664615d564c443a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b26303942494d4f4f4f4f4f4d494045464a5053555656565553504a46443f38302a22191007000000000000010c17222d363f454a4b4f4f4f4f4f4847433c342a1d1416202c353e44484a4f4f4f4f4f4a49443e352c22170b0000000006121f2b37434e58636d74808b92979c9992908d8c8b8c8c8d9092999a948f857d6f6a5f53473d32271b0f03000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000714202d3a4753606d7a868f8f8f877a6d777f868d90939995959495908c8680796d675d544a3f31281e130800000004101d2935404b5564717d8a96a19d9083786c60584e453d35302c29242924292c30353d454f59606d7a7c7975716d685e564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141e2730373d414242424242413d34383a3f4446484949494846443f3a38342e261e181007000000000000000006111b242d343a3d3e42424242423c3a37312a22180b0d1a232c33383c3d42424242423d3c39332c231a1005000000000815212e3a47535f6a737f8c929e97928b8683817f7f7f7f8183868c92999792867c6e62584e43382b1f1306000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000714212d3a4754606d7a8282828282786c6c727b808486888989888684807b736d675d554b42382e1f160c01000000000c18242f3a4653606d7984919e9f958b7f726a5f574e46413a393530352f35393a41454e57606b74808985817e7a6d685e5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c151e262c313435363636363431282c2e34383a3b3c3d3c3b3a38342e2c28231c150c060000000000000000000009121b22292e313236363636362f2e2b262018100608111a21282c2f30363636363631302d28221a11080000000004111d2935414b55626f7c87929f9691857f7a76747372727374767a7f87929a989083766a6054473b2e221508000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000713202c3945525d686d75757575756c6660696e73777a7b7c7c7b7a77736e69605d554b433930261c0d04000000000007121f2c3844515c66727e8b95a09f92867c6f696058524c4745414242434145474c52586069707d8792928e8a867a6d6154473a2e211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c141b212528292929292928251c1f23282c2d2f30302f2e2d2b28231f1c17110a030000000000000000000000000911171d212425292929292922211f1b150e0600000810161c20232429292929292423201c17100800000000000613202c3945515d6775828f999991847b726d67676665656667686d737d88939f95897c6f6256493c2f231609000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000004111d2935414c565d606969696969605b575e6166676d6e6f6f6e6d6766625f57514b433931281e150a00000000000004101c2834404a54606d78839099a39891847b6f6a615e5654524c4f4f4f4c5254565d606a6f7b8592999f978d8074685e5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002091015191b1c1c1c1c1c1b191013171c1f202223232322201f1c1712100c06000000000000000000000000000000060c111517181c1c1c1c1c1515120f0a0400000000050b101416171c1c1c1c1c171614100b050000000000000714212d3a4754606d7986909292877c6e69605d5559585959565d606b75818e9b9a8d8073675a4d4034271a0d000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000000000010d1924303a444c52545c5c5c5c5c53504d5254555c6062626261605d5555534d45403931281f160c03000000000000000c18232e3944505c666f7c87929fa09691847c736d6863605d565c5c5c565d6064686d737c859297a19a92857a6d61564c41362a1d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004090c0e0f0f0f0f0f0f0c04060c10121315161616151312100b06030000000000000000000000000000000000000105090b0b0f0f0f0f0f0908060300000000000000000407090a0f0f0f0f0f0a0a080400000000000000000815212e3b4854616e7b8183868881746a5f57514b4c4c4c4c4c525965717e8b989c8f8275695c4f4236291c0f000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000008131e28323a4145474f4f4f4f4f46444246474b51535556565553514b4847423c352f271f160d04000000000000000007121c28343f4a545f6a717e8a919fa0969187807a74706d68696968696a686d70747a80879297a19f93887d70685e52443a3025190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020203030303020000000003060708090a0908070603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e696e7476797b7b6e61584e4541403f3f41464c5564707d8a979d9083776a5d5044372a1d11000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000000020c1620283035393a42424242423938363a3b404547484949484745403b3a373129241d150d04000000000000000000000c17232e38424e58616c727f8b9298a099928d86817d7a787675757676787a7d81868d9299a19f918c7f736b61564c4132291e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090c0c1313131313130807050200000000000000000000000000000000000005121e2a36424d575e6167666d6f6e695e53463c3f4446494c52565d67727f8c999c908376695d5043362a1d10000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000000040e161e24292c2d36363636362d2b2a2d2f34383a3b3c3c3b3a39352f2e2b262018120b03000000000000000000000006111c26303c46505a626d727e8690959e9f98928e8a8684838282828385878a8e92989f9f97928b7f736d63594f443a3020170c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080b0c0c0b0a0807050200000000000000000000000000000000000000000000000000000000000000000000070d121618192020202020201514120e090300000000000000000000000000000000020e1a25313b454d5354545c6062615e574d46484a505356565e61686d7984919e9b8e8175685b4e4235281b0f000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000000000000000040c13191d20212929292929201f1e2023292c2d2f2f2f2e2d2c2924211e1a150c0701000000000000000000000000000a151e2a343e48515b626c717c838b91979c9f9b9a9391908f8f8f909197979a9f9d99928e857e736d635b52473e32281e0e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12141518191918171514120e0903000000000000000000000000000000000000000000000000000000000000010a11181e2225262d2d2d2d2d2d22211e1a140e060000000000000000000000000000000009141f29333b4246484a50535554534d4d5354545b606266686d727a828f96a0978b7e7164584b3e3125180b000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000000000002080d1113141c1c1c1c1c13121114181c1f2022232322201f1d1814120e0903000000000000000000000000000000030c18222c363f49515a626a6f787f848a8f9298989a9c9c9c9b9c9d9c9b999795918d86817b716c635b524940352c20160c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080e141a1e2121242525252421201e1a140f0a04000000000000000000000000000000000000000000000000000000000a131c232a2e31333939393939392e2d2b261f180f06000000000000000000000000000000030d17212931363a3b3f4446484d5254575e6165666c6f72767a7f858f949e9e92857a6d6054473a2d211407000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000000000000000000000010407070f0f0f0f0f060605070c101314151616151413100c07060200000000000000000000000000000000000006101b242d373f4850585f666d72797e8286898c8e8f9091919190908e8c8a8784807b756e69615a514940372e231a0e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d14191f252a2d2e31323231302e2d2a251f1b150e06000000000000000000000000000000000000000000000000000007111c252d353a3e3f4646464646463b3a37312a21180e03000000000000000000000000000000050f171f252a2d353d444c52565e6166696e7275797c7f83868c92979e9f928b7e71675d5145392c201306000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000000000000000000000000000000303030303000000000004060708090908070604000000000000000000000000000000000000000000000009121b252d363e464e545c60666d71757a7c7f8182838484848383817f7e7b77736e69615e56504840372e251c1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171f252a31363a3b3e3f3f3e3d3b3a36302b2620181006000000000000000000000000000000000000000000000000010d18232d373f464a4c5353535353534846423c332a1f140900000000000000000000000000000000050d17202b353d474f565e61686e72777b7e8285898c8f92999e9f97928b80736c62554b4135291d1104000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b242d343c424a50545c6064676d6f7274767777787777767573716e6966615e57524d443e362e251c130a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e17202930363b4246484b4c4c4b4a4846423b37322a22180e04000000000000000000000000000000000000000000000006121e2a353f4951575960606060606055534d453c31261a0e0000000000000000000000000000000009141f29323d474f5960686e747b7f83878b8f9297999c9e9b97928d857e736e635a50433a2f24180d01000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000000000105070713131313131313131313131313131313131313131313131313131313131313130c0b090601000000000000000000000000000109121b222a30383f444a5153555d60636567696a6a6b6a6a69686664615e5754524d46423b322d241c130a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c162029323b41464d5354575858585754524d47433c342a20150a00000000000000000000000000000000000000000000000916222e3a46515b63666c6c6c6c6c6c6c5f574d42372b1b11060000000000000000000000000000020e1925303b444f59606b707a81868c9095989b9f9c9897928e8a85807a716c635c52483f31281d130700000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000000002080d1113142020202020202020202020202020202020202020202020202020202020202020191816120d0700000000000000000000000000000910181e262e34394044464b515356595b5c5d5e5e5e5d5d5b595754524d4846423b363029201b120a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323b444d52575e616465656463615e57534e463c32261b0f03000000000000000000000000000000000000000000000c1825313e4a57636d7279797979797976695f5346382d22170b000000000000000000000000000005111e2a36424d56606b707d858e92999d9e9a98928f8c8885817d79736d68625a524a40362d1f160c0100000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00000000050c13191d20212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2525221e1811090100000000000000000000000000060c151c23282e34383a404547494c4e4f5051515150504e4c4b4846423b3a36302a251f170e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1924303a444d565e61696e71727271706e69625f584e43372b1f120600000000000000000000000000000000000000000006131f2b37434e5866727f8686868686867b6e6153493f33271b0f03000000000000000000000000000714202d3a46525e69707d8791979f9e96918d8985827f7c7874706d67615e56504840382e241b0f050000000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000000050e161e252a2d2e393939393939393939393939393939393939393939393939393939393939393932312e29231b13090000000000000000000000000000030a11171c23282c2f35393a3c3f414344444544444342403e3b3a36302d2a251f19140d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565e686e757b7e7f7f7e7d7b786f6a5f53473b2e2115080000000000000000000000000000000000000000000815212e3b47535f6a778490939393938c8073655b5044372b1f1307000000000000000000000000000814212e3b4754616e7b859299a096918a84807c7975726f6c6564605c55524c443f3a36302921170d0300000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0000020c1620283036394646464646464646464646464646464646464646464646464646464646464646463f3e3a342d251b1107000000000000000000000000000000060c12181c1f24292c2d303234363737383737363533312e2d2a25201e1a140e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d686e7a82878a8b8b8b8a87857c6f6255483c2f221509000000000000000000000000000000000000000003101c28343f4a54626f7c88959f9d9f9e9184786c6053463a2f24180d01000000000000000000000003101c28343f4a546773808d97a09691847d7873706d666562605b53535453514b4f4846423b33291f140900000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000008131e28323a41465353535353535353535353535353535353535353535353535353535353535353534c4a463f372d23180d0100000000000000000000000000000000070c1012181d1f20232628292a2b2b2b2a2a28262421201e1a14120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b55606d7a848f93979898979697897c6f6356493c30231609000000000000000000000000000000000000000006121f2b3844505c6673808d9a9590929996897d7063554b4035291d1104000000000000000000000006121f2c3844505c667784919e9d91847a706c6563605c54555350565d60605d555b54524d453b30251a0e02000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a00010d1925303a444c525f6060606060606060606060606060606060606060606060606060606060606060585651493f34291e120600000000000000000000000000000000000004070c10131416191b1c1d1e1e1e1d1d1b19181514120e09050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c6774818d969e9f9892908f91897c6f6356493c3023160900000000000000000000000000000000000000000713202d3a4653606d7985919d908387929b8e8174675d5145392c20140900000000000000000000000713202d3a4653606d7986939f978a7d7168605b5353514a4946525d686d6d676a68615e574d42362a1e1205000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a0005111d2a36414c565e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c65625b51463a2e221609000000000000000000000000000000000000000000040607090c0e101111121111100f0d0b080705020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7985929f9f948f86838384877d6f6356493c302316090000000000000000000000000000000000000004111d2935404b5563707d8997988b7f82909c92867a6d6053473b31261a0e00000000000000000000000714202d3a4753606d7a8698a294877b6e61565049464444464e58606d7a7a7876756e695e52463a2d201407000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000713202d3946525e68767979797979797979797979797979797979797979797979797979797979797979726d62564a3e3125180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8998a29c8f827a76767779786d6053463a2d201307000000000000000000000000000000000000000613202c3945515d6775818e9b96887b7f8c99988b7e7164574d42362a1b11060000000000000000000006131f2c3845515d677985929f94887b6e61575350494a5153585f6a7581868583817b6e6154483b2e211508000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c7985929f978a7d7064574a3d3124170a000714212e3a4754616d7a86868686868686868686868686868686868686868686868686868686868686867f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a297887c6f6869666d6d665c5145382c1f1306000000000000000000000000000000000000000714202d3a4753606d7a86929e9184777c88959c908376695f5346382d22170b0000000000000000000004101d2935404b556a7783909d988b7e716962605b53545c60636a6f7c8792929085796d6053463a2d201307000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c79859299978a7d7064574a3d3124170a000714212e3a4754616d7a879393939393939393939393939393939393939393939393939393939393938b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b989f9285786a5f565c60605c544b4034281c100400000000000000000000000000000000000005111e2a36424d5764717e8b989a8d80747784919d93877b6e6153493f33271b0f03000000000000000000000c18242f404d596673808c989e92857b736f6c656a6a666d6f747c849199998e8174665c5144382c1f1206000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000131f2c3946525f6c79868c8c8c8a7d7064574a3d3124170a000714212e3a4754616d7a87949fa79f9d9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989e9184776b584e515353514b42392e23180c000000000000000000000000000000000000000714202d3a46525e6976828f9c98897d7073808c999a8c8073655b5044372b1f1207000000000000000000000715212e3b4854616e7b86929f979285807b7977777777797c818691969f92877b6e61544a4034281c1004000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000c1926333f4c5966727f7f7f7f7f7b6e6255483b2f221508000714212e3a4754616d7a8794a09f95908d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144464645403930271d1207000000000000000000000000000000000000000814212e3b4754616e7b87939f9285796d6f7c88959e9184786c605346392f24180d010000000000000000000714202d3a46525e69727f8b939a98928c88858483838486898e929999928b7f72695f5342392e23180c00000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000c1825313e4a57636d72737373736e695f53473a2e211408000714212e3a4754616d7a8794a09d908380818181818181818181818181818181818181818181818181807d706356493d3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e51443a3a38342e271e150b0000000000000000000000000000000000000006121f2b37434e5865727f8c999b8e8175676a7784919d96897c7063554b4035291d100400000000000000000005121e2a36424d57626d727f889094999998929190909192999a999490877f726d62574d4230271c120700000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000916222e3a46515b636666666666625f574d42372b1e1206000714212e3a4754616d7a8794a0998c807474747474747474747474747474747474747474747474747474706b6054483b2f22160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372d2c28231d150c03000000000000000000000000000000000000000815212e3b47535f6a7783909d988a7d706466737f8c999b8e8174675d5145392c201409000000000000000000020e1a25303b45515b626d727c83888d8f9297949595949792908c88837c726d635b51453b311e150b0000000c1926333f4c5966727f8c99a194887b6e6155483b2e22150800000006121e2a353f495157595959595955534d453c31261a0e02000714212e3a4754616d7a8794a0998c8073676767676767676767676767676767676767676767676767676360594f44382c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1f1c18120b030000000000000000000000000000000000000003101c28343f4a54626f7c88959f9285796d60616e7b88959f92857a6d6053473b31251a0e0200000000000000000009141f29333f49515b626a6f767c8083858787888888878583807c766f6b635b51493f33291f0c030000000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000010d18232d373f464a4c4c4c4c4c4847423c332a1f150900000714212e3a4754616d7a8794a0998c8073665a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a56544f473d32271b100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e100c0700000000000000000000000000000000000000000006121f2b3844505c6673808d9a9b8e8175675c5f697683909d988b7e7164574d42362a1e1205000000000000000000020d17212d373f49515860626a6f7376787a7b7b7b7b7a7876736f6a63605951493f372d21180d000000000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000007111c252d353a3e3f404040403b3a37312a21180e0300000714212e3a4754616d7a8794a0998c807366594e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4948443d352b21160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e1100000000000000000000000000000000000000000000000713202d3a4653606d7984919e978a7d7063555765727f8b999c8f8276695e53463a2d21160a00000000000000000000050f1b242d373f464e54585f626669686d6e6f6f6e6d686966626058544f473f372e251b0f06000000000c1926333f4c5966727f8c99a194887b6e6155483b2e22150800000000000a131c232a2e3133333333332f2e2b261f180f060000000714212e3a4754616d7a8794a0998c807366594d414141414141414141414141414141414141414141413d3b38322b23190f040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e110400000000000000000000000000000000000000000004101d2935404b5563707d89979f9285796d605354616e7b87939f93877b6e6154483d32271b0f010000000000000000000009121b252d343d43474e53555a565d6061626261615d565955544e48433d342e251c130900000000000c1926333f4c5966727f8c99a194887b6e6155483b2e2215080000000000010a11181e2225262626262622211e1a150e06000000000714212e3a4754616d7a8794a0998c807366594d40343434343434343434343434343434343434343434302f2c2721191107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e11040000000000000000000000000000000000000000000613202c3945515d6775818e9b9b8e8174665c51525e6876838f9c9a8c7f7366594f43382c1d1207000000000000000000000009131b222b32373c4347484d4c52545455555554524c4d4947433c38322b221c130a0100000000000c1926333f4c5966727f8c99a194887b6e6155483b2e22150800000000000000070d12161819191919191514120e090300000000000714212e3a4754616d7a8794a0998c807366594d403327272727272727272727272727272727272727272322201b160f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e11040000000000000000000000000000000000000000000714202d3a4753606d7a85929f978a7d7063544b4d5665717e8b999e9184776b605448392f24180c00000000000000000000000109101920272b31373a3c4041454748484848474641403c3b37322c272119100a010000000000000c1926333f4c5966727f8c99a194887b6e6155483b2e22150800000000000000000106090c0c0d0d0d0d08080602000000000000000714212e3a4754616d7a8794a0998c807366594d40332d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c28231c150c0b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e1104000000000000000000000000000000000000000005111e2a36424d5664717e8b989e9285796d6053464754606d7a86929f96897c6f63554b4035291d1004000000000000000000000000070f151b20262b2e2f3035393a3b3c3c3b3a3935302f2e2b27201b160f0700000000000000000c1926333f4c5966727f8c99a194887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a38342e271e150b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e110000000000000000000000000000000000000000000714202d3a46525e6976828f9c9a8e8174665c514445525d6875828f9c9a8e8174675d5145392c1f140900000000000000000000000000040a0f151b1f212224292c2d2e2f2f2e2e2d292422221f1b150f0a040000000000000000000c1926333f4c5966727f8c969694887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d474747474747474747474747474747474747474644403930271c12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989d9184776a5e5144372b1e0e0802000000000000000000000000000000000000000814212e3b4754616e7b87939f97897d7063544a40414c5664717e8a989f9285796d6053473b30251a0e020000000000000000000000000000040a0f121515191d20212122222221201d191615130f0a0400000000000000000000000c1926333f4c5966727f89898989887b6e6155483b2e221508000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80736659535353535353535353535353535353535353535353514a42392e23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a1925323f4c5865727f8b989d9184776a5e5144372b1e19140d05000000000000000000000000000000000006121f2b37434e5865727f8c999e9285796d6053463a3a4753606d7a86929f988a7e7164574d42362a1e120500000000000000000000000000000000030608080d111314151515151413110d08080603000000000000000000000000000815222e3b4855616e7b7d7d7d7d7d7a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366606060606060606060606060606060606060606060605c544a4034281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c141c23323f4c5865727f8b989d9184776a5e5144372d2a251f170e05000000000000000000000000000000000815212e3a47535f6a7783909d9a8e8174665c5044383945515d6775818e9b9c8f8276695e52463a2d20160a000000000000000000000000000000000000000001040707080909080707050100000000000000000000000000000000000714212d3a46535f696e70707070706d675d5145392c1f1306000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80736d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d665c5144382c1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141e262e343f4c5865727f8b989d9184776a5e51443b3936302920170d020000000000000000000000000000030f1c28333f4a54626f7c8895a097897d7063544a3f3435404b5564707d8a979f93877b6e6154483d32271b0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d575f616363636363605d554b4035291d1004000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998d80797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a786d6053463a2d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c2630383f444c5865727f8b989d9184776a5e51484746413b32291f1408000000000000000000000000000006121f2b3844505b6673808d9a9e9285796d6053463a2e2f3a4653606d7985929f998c7f7266584e43382c1d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313b454d5355565656565653514b43392f24180c00000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09c928d86868686868686868686868686868686868686868686867f7366594c403326190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17232e38424a50535865727f8b989d9184776a5e555554524d443b3025190e02000000000000000000000000000613202d394653606c7884919e9a8d8174665c5044382b2c3845515c6674818e9a9d9184776a605448392f23180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333b4246484a4a4a4a4a4745403931271d120700000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a49c99939393939393939393939393939393939393939393938c7f7366594c403326190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545c606165727f8b989d9184776a616161615e564d41362a1e110500000000000000000000000004101d2935404b5563707d8996a197897c7063544a3f34282834404b5463707d8997a096897c6f62554b4034291c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17212931363a3b3d3d3d3d3d3a39352f271f150b0100000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a69f9c999999999999999999999999999999999999999999998c7f7366594c403326190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c666d6e6e727f8b989d9184776e6e6e6e6e685e5246392d2014070000000000000000000000000613202c3945515d6774818e9b9e9184786c605346392e23232e394653606c7884919e9a8e8174675c5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f171f262a2d2e30303030302d2c29241d150d030000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09f948f8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7f7366594c403326190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787b7b7b808c999e91847b7b7b7b7b7b6e6154473b2e2114080000000000000000000000000714202d3a4753606d7985929c9a8d8074665b5044382b1c1f2b3844505b6674808d9a9c9285796d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d141a1e21222323232323201f1d18120b03000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09c8f827f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8788888c929ca0969188888888888275695c4f4236291c0f0300000000000000000000000b1824313e4b5764717e8a8f8f8f897c6f63544a3f33281c1c28333f4a54626f7c898f8f8f8a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12141517171717171413100c070100000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073727272727272727272727272727272727272727272726f6b6054483b2f221509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a879494999ca4a8a09e949494948f8275695c4f4236291c0f0300000000000000000000000c1926333f4c5966727f8282828281776c605346392d221717222d384754606a7581828282827f7266594c3f3326190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020507080a0a0a0a0a07060400000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073666666666666666666666666666666666666666666666360594f43382c1f1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a878f8f90949fa298928f8f8f8f8f8275695c4f4236291c0f0300000000000000000000000c1825323e4b57636d7275757575756c655b5044372b1c11111c2b37434e58656f7575757575726d63574b3e3225180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80736659595959595959595959595959595959595959595956544f463d32271b0f03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a8282828290999f928682828282827f7366594c403326190d0000000000000000000000000a16222f3a46515b63666969696968605b53493f33271b0a0f1b27323d46535d65686969696966635b51463a2e22160a00000000000000000000000000000000000005090d0f101313131313130a0907030000000000000000000002070b0d0d1313131313130c0b09050100000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4948433d342b21160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202c3945525d686d7575757987939d91847775757575736d63574b3e3225190c00000000000000000000000006121e2a353f495157595c5c5c5c5b53504941382d22170b0a16202b34414b53595b5c5c5c5c595751493f352a1e120600000000000000000000000000000000020a1015191c1c202020202020161613100b0400000000000000080e1317191a202020202020181815120c06000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3c3b38322b22190f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c565d606969677784909d9184776a69696966635b51463b2f23160a000000000000000000000000020d18232e373f464b4c4f4f4f4f4f46443f382f261b1106040f19222f3941484d4e4f4f4f4f4c4b463f372e23180d02000000000000000000000000000000040c141b212528292d2d2d2d2d2d2322201b160f0700000000020a12191f2326272d2d2d2d2d2d2524221d1811090000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d40333333333333333333333333333333333333302f2c272119130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19242f3a444c52545c556774818e9a9184776a5e5c5c5957514940352a1e12060000000000000000000000000007121c252e353a3e3f42424242423937332d261d140a000007101d272f373d4042424242423f3e3a352e251c1107000000000000000000000000000000000c161e262d323536393939393939302f2c27211911070000000a141c242a2f333439393939393932312e29231b120900000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4033303030303030303030303030303030303030302d2c29241e160e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a4145474f5865717e8b989184776a5e514f4c4b4640372e23190d0200000000000000000000000000000a131c232a2f323336363636352d2b27221b140b020000000b151d252c3134353636363633322e2a231c130a00000000000000000000000000000000040d1e2830383e41434646464646463d3b38322b23190f040008121c262e363b3f404646464646463f3d3a342d251b1106000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d403d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a3935302820160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c1620282f35393c4855626f7b88989184776a5e5144403e3b352e251c1207000000000000000000000000000000010a12181e2225262929292928201f1b17110a0200000000030b131a20242728292929292625221e18110a01000000000000000000000000000000010c161f303a42494e4f5353535353534948443d352b21160b020e19242e3840474b4d5353535353534b4a453f372d23180c010000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366594d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4745413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161e24292d394653606c7985909084776a5e514437322f2a231c130a000000000000000000000000000000000000070d121618191c1c1c1c1c13120f0b060000000000000001090f14181b1b1c1c1c1c191816120d07000000000000000000000000000000000007131d2831424c545a5c60606060606056544f473d32271b1007131f2a36404a52585a606060606060585651493f34291d12010000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c807366595757575757575757575757575757575757575757575754524c443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c13191f2b3844505b66748183838175685b4f423528231e19120a010000000000000000000000000000000000000002060a0c0c0f0f0f0f0f060503000000000000000000000004080c0e0f0f0f0f0f0c0c0a06020000000000000000000000000000000000010d18242f3a43545e66696c6c6c6c6c6c6360594f44382c20130b17232f3b47525c64676c6c6c6c6c6c65625b51453a2e1d12070000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c8073666363636363636363636363636363636363636363636363605d564c4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f1c28333f4a54646e747777756f65594d4134281b120d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b55667076797979797979706b6054483b2f2216081926333f4b58646e73797979797979726d62564a392f24180c0000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0998c80737070707070707070707070707070707070707070707070706d685d5245392c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d3842535c64676a6a68655d53483d3125190c0200000000000000000000000000000000000000000000000000000000050a0e101113131313100f0d0a0500000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6776828686868686867d706356493d302519111e2a36414c566773808686868686867f7265554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09b8e817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f414a53585b5d5d5b59534b42372c201509000000000000000000000000000000000000000000000000000000030b11161a1d1d202020201d1c1a16110a030000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8692939393938d807366564c41362a1d14202d3946525e68778390939393938f8275675d5145382c1f130600000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a09e938e8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a897c6f6356493c302316090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2f3841484c4e50504f4d48423930251b0f040000000000000000000000000000000000000000000000000000050d151c2226292a2d2d2d2d2a2926221c150d0400000000000000000000000000000000000000000000000000000000000000030f1b27333f495364707d8a99a39f9f9d908377685e5246392d2014212e3b4754616e7a87939f9f9f9f9286796d6053473a2d20140a00000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8794a0a59e9b969696969696969696969696969696969696969696969696897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b1d262f363c4041444442413d3730271e14090000000000000000000000000000000000000000000000000000030d171f272d323637393939393635322d271f160d0300000000000000000000000000000000000000000000000000000000000005121f2b3744505b6574818e9aa09d9e9f93877a6d6154473a2e211825313e4b5864717e8b9a9f9c9fa2988a7d7063574a3d31261b0f03000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a879496969696969696969696969696969696969696969696969696969696897c6f6356493c30231609000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b141d252b30333437373534312c251e150c0200000000000000000000000000000000000000000000000000000b151f2931393e42444646464643423e3831281f150a0000000000000000000000000000000000000000000000000000000000000613202d394653606c7885919e959092979a8a7e7164574b3e31261f2b37434e586875818e9b948f92999a8d817467584e43372b1f1206000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a878989898989898989898989898989898989898989898989898989898989897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b131a202427282a2a282825201b140c03000000000000000000000000000000000000000000000000000005111c27313b434a4f5053535353504e4a433a31271c110500000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c88979d908385929b8e817468584e43372b212e3b47535f6a7885919c8f8287929e9184786a5f53473a2e211508000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a6d6054473a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f14181a1b1d1d1c1b19150f09020000000000000000000000000000000000000000000000000000000a16222d39434d555b5d606060605d5a544c43382d22160a0000000000000000000000000000000000000000000000000000000005111e2a36414c5666737f8c999a8d80828f9c9184786a5f53473a2e222f3c4855626f7c8897988c7f83909d96887b6f6255483c3024190d0100000000000000000000000000000000000000000000000000000000000000000006121f2c3844515c666d707070707070707070707070707070707070707070707070707070707070706d685d5245392c2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003080b0d0e11110f0e0c090400000000000000000000000000000000000000000000000000000000010e1a26323e4a555f666a6c6c6c6c69665e544a3e32261a0d010000000000000000000000000000000000000000000000000000000713202d3946525e687683909d978a7e7f8c9996887b6f6255483c2f2934404b5565727f8c9898897d808d9a998c7f7266564c4135291d110500000000000000000000000000000000000000000000000000000000000000000004101c2834404a545c6063636363636363636363636363636363636363636363636363636363636363605d564c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101d2936424f5b667177797979797670665a4e4235291c0f030000000000000000000000000000000000000000000000000000000714212e3a4754616d7a87939f97877b7d8999988c7f7265554b40342c3845515c6776828f9c9286797d8a979c908376685d5246392d201306000000000000000000000000000000000000000000000000000000000000000000000c18232e39424a51535656565656565656565656565656565656565656565656565656565656565654524c443a2f24190d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783868686868276695d5043362a1d1003000000000000000000000000000000000000000000000000000004101c2834404a5464717e8b9a9e9185787a86929c8f8276675c5145382d3a4753606d7986929c9083767a87969f92867a6d6154473a2e23170b0000000000000000000000000000000000000000000000000000000000000000000007121c2730394044464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4745413a32281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909393908376695d5043362a1d1003000000000000000000000000000000000000000000000000000006121f2c3844515c6675828e9b9b8e82757683909d9286796d6053473a303d4a5663707d8998998c80737784919e998a7e7164544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000b151e272e34383a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a39352f2820160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d100300000000000000000000000000000000000000000000000000000713202d3a4653606d7985929f988b7e7273808d9a98897d7063564a3d36414c566773808d9a99897d7074818e9b9b8e8175665c5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000030c151c23282c2d303030303030303030303030303030303030303030303030303030303030302d2c29241e160d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d100300000000000000000000000000000000000000000000000000000a1623303d495663707d8998a196887b6e707d8a999a8d807367564d413946525e687784909d92867a6d717e8b979f9285796d6053463a2d2013090000000000000000000000000000000000000000000000000000000000000000000000030b12181c1f202323232323232323232323232323232323232323232323232323232323232321201d19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d10030000000000000000000000000000000000000000000000000005121e2b37424d576773808d9a9e918478696d7a86929d908477685e52463b4754616e7a87959c908376676e7b8795a097897c6f6356493c31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000070c101213171717171717171717171717171717171717171717171717171717171717171413110d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d1003000000000000000000000000000000000000000000000000000714212d3a46535f697784919d9b8e817568677683909d95877a6e6154473f495364717e8b97998c807366697784919d998d807366574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000406070a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a07070401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d1003000000000000000000000000000000000000000000000000000815222e3b4855616e7b8896a09a8b7e71646673808c99978b7e7164534944505b6575818e9b98897c70636774808d9a9d908477695e53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d100300000000000000000000000000000000000000000000000004111d2935414b5565727f8b989f93877a6e61636f7c89989b8e8175655b504653606c7885919e9285796d6063707d8a98a095877b6e6154483b2f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d10030000000000000000000000000000000000000000000000000613202c3945515d6776828f9c9d908377685e606d7985929e9285786c60534855626f7c88979c8f8275665c606d7a86929f988b7e7265554b4035291d1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d10030000000000000000000000000000000000000000000000000714212d3a4754606d7a86929f998d807366565c6675828f9b97887c6f62554b5565727f8c98988b7f7265545d6776828f9c9c8f8275675d5145392c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d10030000000000000000000000000000000000000000000000030f1b27333f495364707d8a99a298897c6f63565465727e8b98998c7f726655515d6776828f9c96887b6e61555566727f8c999f92867a6d6053473a2d20140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d1003000000000000000000000000000000000000000000000005121f2b3744505b6574818e9b9f9285796d605355616e7b88969c8f8276675d53606d7986929e918477695f5355626f7c8897a1988a7d7063574a3d32261b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2a3744505d6a7783909d9c908376695d5043362a1d100300000000000000000000000000000000000000000000000613202d394653606c7885919e9b8f8275665c50535f697784919e9286796d605663707d89989a8d817467574d53606c7885919e9a8d817467584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a7783909d9c908376695d5043362a1d080000000000000000000000000000000000000000000000000916222f3c4955626f7c8897a1988b7e7165544a4d576774818d9a98897d7063566773808d9a998a7d7064574a505b6574818e9b9e9184786a5f53473b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e172a3744505d6a7783909d9c908376695d50433025190e050000000000000000000000000000000000000000000005111e2a36414c566673808c99a095877b6e6154484a5764707d8a999a8d8073675e687784909d92867a6d605347495364717e8a9aa196887c6f6255483c3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d17202a36424d576a7783909d9c90837669564c41362a20170c020000000000000000000000000000000000000000000714202d3946525e687783909d9d918477695e53464753606d7a86929d90837768616e7a87959c8f8376675d51454754616d7a87939f998c7f7266564c41362a1d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141e29323b46525e697783909d9c908376685e52463e32291e13080000000000000000000000000000000000000000000814212e3b4754616e7a87939f9a8d807367574d4245515d6776838f9c93877a6e64717e8b97998c7f7266554b4046525e687783909d9d908376685e5246392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e1925303b44505a616e7b85929f9f92857a6e615a50443a3025190e040000000000000000000000000000000000000004101c2834404b5465717e8b9aa298897d7063564a3d404b5566727f8c999a8a7e716875818e9b97887c6f6255493c414c566673808d999f93867a6d6154473a2e23170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c17202a36414c56626c75828f98a2a2978f82756c61564c41362a20160c0200000000000000000000000000000000000006131f2c3845515c6675828f9b9f9285796d6053463a3c4955626f7c88979b8e8174697885919e9185786c605346393d495663707c8998a2998a7e7164544a3f34281c1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e29323a46525e68717e8b949e9f9f9e938a7e71685e52463e32281e13080000000000000000000000000000000000000713202d3a4653606d7985929f9c8f8275675c514538394653606c7885919e9184786e7b88979b8e8174655b5044373a4653606d7985929f9b8e8175665c5044382c1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1925303a44505a616e7a85929f989292979e92857a6d615a50443a3024190d0400000000000000000000000000000000000a1723303d4a5663707d8998a2988b7f7265554b40343744505b6574818e9b96877b717e8b98998a7e716453493f333844515c6675828f9b9f9285796d6053463a2d201309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c16202a36414c56616c75828f979f928685929f978e81756c61564c4135291f160c0100000000000000000000000000000006121e2b37424d576774808d9aa096887b6e6155483b2e333f495364717e8a99978a7e74818e9b93867a6d6154473a2d34404a5465727e8b98a297897c6f6356493c31261a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28323a46525e68717e8a939e958c7f7e8b949e938a7e70685d52463e31281e13080000000000000000000000000000000814212e3a47535f697784919e9e918477695f53463a2d2d3a4754616d7a86939a8d817784919d908376685e5246392d2e3b4855616e7b8896a09a8d807367574d42362a1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1924303a44505a616d7a85929e99908378778290989e91857a6d61594f433a2f24190d0400000000000000000000000000000815222f3b4855626e7b8896a09a8d807467574d42362a2d3946525e687683909d90837a8693998c807366564c41362a2d3a46535f697784919e9d918477695f53463a2d211407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2935414c56616c75818e979f93877c6f6e7b86929f978e81756b61564c4135291f160c0100000000000000000000000004111d2935414c5565727f8c98a3988a7d7063574a3d31262935414c566673808c9992877d8a9a97897c6f6356493c30252a36424d576774808d9aa095887b6e6155483b2f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313a45525d68707d8a939e968d80746a69737f8c959e938a7d70685d52453d31281d13070000000000000000000000000613202c3945515d6776828f9c9f92867a6d6053473a2d2025303c4956636f7c8997999083909c9285796d6053463a2d2026313d4a5763707d8a99a3988b7f7265554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d19242f3a434f59606d7a85919e9e9184796d60606d788390999e91847a6d60594f433a2f24180d0400000000000000000000000714212d3a4754606d7a86929f9c8f8276675d5145392c1f202d3a4653606d7985929f9490949b8e8275665c5044382c1f202d3a4753606d7a86929f9c8f8276675d5145392c201306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2935414c55616b74818e979e938a7d70675d5c666f7c87939f968e81746b60554b4135291f160c01000000000000000000030f1b27333f495364717d8a99a3988c7f7265554b4035291d1f2b3844505c6675828e9b9f9c9f988b7e7165544a3f34281c202c3945515d6776838f9c9f92867a6d6053473a2d20140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28313945515d67707d8a939e978e81756b615554606a74808d969d93897d70675d51453d31281d120700000000000000000005121f2b3744505b6574818e9ba196887b6e6255483b2f24181c28343f4a5465717e8b98a7a9a095877b6e6154483b2e23171d2935404b5566727f8c99a3988a7d7064574a3d32261b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d18242f39434f59606d7a84919e9e92857a6d61594f4e58606d7984919e9e9184796d60594f43392f24180d0300000000000000000613202d394653606c7885919e9e9184786a5f53473a2e1d1217232e3b4754616e7b8795a0a39d918477695e52463a2d1c1118242f3c4855626f7c8897a19a8e817467584e43372b1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f2935404b55606b74818e969f948b7e71685e524745515d67707d8a939e968d81746b60554b4035291f150b01000000000000000916232f3c4956626f7c899796968d817467584e43372b1f0b14202d3a46525e697783909696968d807467574d42362a1e0a15212e3b47535f6a78859196969184786a5f53473b2e21150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27313945515d67707d89939d988f82766c61564c41414b55616c75818e979f93887d70675d51453d31271d1207000000000000000d1a2633404d5966738089898989897d7064574a3d31261a0f111e2a36424d5666738089898989897d7063564a3d30251a0e121f2b37434e5868748189898989887c6f6255493c2f2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18242f39434f59606d7984919e9f92867b6e615a50443a3a43505a616e7b85929f9a9184796d60594f43392f24180c030000000000000916222f3c4955626f7c7d7d7d7d7d796d6053473a2d2014090e1925303b4754616e7a7d7d7d7d7d796d6053463a2d2013090f1b26323c4854616e7b7d7d7d7d7d7b6e6154473b2e21140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2935404b55606b74808d969f958c7f72695f53483e32313e46525e68727e8b949f968d80746b60554b4035291e150b0000000000000815212e3b47535f6a6f70707070706d675d5145382c1f13060914202d3946525e686e70707070706d675c5145382c1f13060a15212d3a46535e696e70707070706e695e52463a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303945515d676f7d88939f999083786d60574d42362d2a36414d56606c778290989f93887d6f675d51453d30271d1207000000000006131f2b37434e585f626363636363605d554b4035291d100405111e2a36414d565e616363636363605c554b4034281c100405121e2a36424d575e616363636363615e574d42362a1e1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39434e58606d7984919a9f92877c6f665c50453b312425303b44505b656e7b86929f9a9184796d60584e43392e23180c0400000000030f1b26323c464e5355565656565653514b43392f24180c00020e1925303b444d5254565656565653514b43392e23180c00020e1a25313b454d5354565656565654524d453b30251a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b55606a73808d96a0968d80736a5f544a3f33291f1f27333f49535f6a737f8c95a0968d80736a60554b40342820150a00000000000a15202a343c4347494a4a4a4a4a4745403931271d1207000008141f29323b4146474a4a4a4a4a4645403930271d1207000009141f29333b4246484a4a4a4a4a4746423b33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c676f7c87929f9a9184796d60584e42382e211717222d38414e57606d7983919a9f93877c6f675c51453c32271b0f0300000000040e18222a32373b3c3d3d3d3d3d3a38352f271f150b010000020d1720293036393b3d3d3d3d3d3a38342e271e150b000000030d17212931363a3b3d3d3d3d3d3b3a36302920170d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e58606d798391999f93887d70675c51463c30261c0f111b262f3c45515c666f7c88939f999183796d60584e43372b1f1306000000000007101820262b2e2f30303030302d2c29241d150d0300000000050e171f252a2d2e30303030302d2c28231d150c0300000000050f171f252a2d2e30303030302e2d2a251f170e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a73808d9596978e81746b60554b40342a1e140a0a141d2834404b54606b74808d9696958d80736a6054473b2e221508000000000000070e151b1f21222323232323201f1d18120b03000000000000050d14191e20212323232323201f1c18120b03000000000000050d141a1e2121232323232321201e1a140d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8689898989857a6d60594f43392f22180c02020b18232e39424f59606d7a8489898989877c6f6255493c2f22160900000000000000040a0f13151617171717171413100c0701000000000000000002080e11141417171717171313100c0700000000000000000003090e12141517171717171414110e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7c7d7d7d7d7d7b6e685d52473d31271d1006000007121d27303d45515d676e7b7d7d7d7d7d7c6f6255483c2f221509000000000000000000030608090a0a0a0a0a07060400000000000000000000000000020507080a0a0a0a0a07060400000000000000000000000000020507080a0a0a0a0a0807050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3a47535f6a6e70707070706e6a5f564c41352b1f150b000000000b151e2935414c555f696e70707070706f6a5f53473a2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b37434e585f626363636363625f574e443a2f23190d0300000000030c19242f3a434d575f626363636363625f584e43372b1f12060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020f1a26313c464e5355565656565655534e453c32281e110700000000000008131e28313c454d5355565656565655534e463c31261a0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343c4347484a4a4a4a4a4847423c332a20160c00000000000000010c161f2a333c4247484a4a4a4a4a4847433c342a20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e18222a31373a3b3d3d3d3d3d3b3a37312a21180d040000000000000000040d18212a31373a3b3d3d3d3d3d3c3a37312a22180e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1820262b2e2f30303030302f2e2b2620180f0600000000000000000000060f1820262b2e2f30303030302f2e2b262018100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e151a1f2122232323232322211e1a150e06000000000000000000000000060e151a1e2122232323232322211f1a150e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f12141517171717171514120e0903000000000000000000000000000003090e12141517171717171515120f0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020608080a0a0a0a0a08080602000000000000000000000000000000000000020608080a0a0a0a0a09080603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: +--- !u!21 &783799688297434243 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LiberationSans Atlas Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 704257233308556572} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _CullMode: 0 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 10 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 1024 + - _TextureWidth: 1024 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset.meta new file mode 100644 index 0000000..975113e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79122942d190042669bd4a184e83db8b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf new file mode 100644 index 0000000..626dd93 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf.meta new file mode 100644 index 0000000..435ecfc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/LiberationSans.ttf.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: d773920d064f540f18ab094416a6864d +timeCreated: 1484171297 +licenseType: Pro +TrueTypeFontImporter: + serializedVersion: 2 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 1 + characterPadding: 0 + includeFontData: 1 + use2xBehaviour: 0 + fontNames: [] + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf new file mode 100644 index 0000000..2107596 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf.meta new file mode 100644 index 0000000..585a230 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Fonts/afont.ttf.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: a9d380ac100490b48a7e8fc9b5da7cc7 +timeCreated: 1446193155 +licenseType: Pro +TrueTypeFontImporter: + serializedVersion: 2 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 1 + characterPadding: 0 + includeFontData: 0 + use2xBehaviour: 0 + fontNames: + - Droid Sans + - Droid Sans Fallback + - Microsoft YaHei + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture.meta new file mode 100644 index 0000000..cd000ee --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1e6dd843707ec2c44910af304cbecd3a +folderAsset: yes +timeCreated: 1464270030 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat new file mode 100644 index 0000000..03cf048 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat @@ -0,0 +1,77 @@ +%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: Globe Material + m_Shader: {fileID: 10703, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + 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: 2800000, guid: a9f1967c2ba9bff4b93efceca70b54a5, type: 3} + 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} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Glossiness: 0.5 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat.meta new file mode 100644 index 0000000..392b6a3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/Globe Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa9cae01e1843384686010036f374ee2 +timeCreated: 1464247826 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png new file mode 100644 index 0000000..906521d Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png.meta new file mode 100644 index 0000000..3f94c03 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Gesture/globe.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: a9f1967c2ba9bff4b93efceca70b54a5 +timeCreated: 1465913242 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons.meta new file mode 100644 index 0000000..10dc7db --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 51b8c529035e8ea439f9b55d0d1ab04e +folderAsset: yes +timeCreated: 1446628629 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png new file mode 100644 index 0000000..ca1c9c6 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png.meta new file mode 100644 index 0000000..fbd53ec --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i0.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 2b4a52e704e150c4082c996d30040be6 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i0.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png new file mode 100644 index 0000000..962571c Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png.meta new file mode 100644 index 0000000..0c00b2f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i1.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 01d5999d46ad1874cb6c9ddd233d9eb8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i1.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png new file mode 100644 index 0000000..637e439 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png.meta new file mode 100644 index 0000000..123d4ab --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i2.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 1fd1555241ea6e84195fc2ea4fc62770 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i2.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png new file mode 100644 index 0000000..1609a74 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png.meta new file mode 100644 index 0000000..d798859 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i3.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 01fafa2ac11f9ae4aa694ff241306d9e +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i3.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png new file mode 100644 index 0000000..aea7a27 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png.meta new file mode 100644 index 0000000..90972a4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i4.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: c0bed239a472e4a439a4d31c2954ce15 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i4.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png new file mode 100644 index 0000000..a520b0f Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png.meta new file mode 100644 index 0000000..9c69a07 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i5.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: feb2e3d03dfb98649aceb692468b71fb +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i5.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png new file mode 100644 index 0000000..2deeb05 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png.meta new file mode 100644 index 0000000..35311ee --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i6.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: f17aab5275e124842a951aec138b94a7 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i6.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png new file mode 100644 index 0000000..f928e7c Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png.meta new file mode 100644 index 0000000..d8be929 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i7.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: a506a1c074c2c8341bc0baf13ab5fd68 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i7.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png new file mode 100644 index 0000000..91c4c30 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png.meta new file mode 100644 index 0000000..8a5bec7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i8.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 8d0786d8f92f7f544b7147b1d441a2ff +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i8.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png new file mode 100644 index 0000000..3c3c10a Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png.meta new file mode 100644 index 0000000..652825b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Icons/i9.png.meta @@ -0,0 +1,54 @@ +fileFormatVersion: 2 +guid: 5f96b07c7caa7f84db1236359e8b0d43 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: fairygui-examples/i9.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture.meta b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture.meta new file mode 100644 index 0000000..a93c764 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 39e75451504ad64498ffbcc17bc583c6 +folderAsset: yes +timeCreated: 1447172616 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader new file mode 100644 index 0000000..6ac923c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader @@ -0,0 +1,69 @@ +Shader "Game/FullScreen" { + Properties { + _MainTex ("Base (RGB) Trans (A)", 2D) = "black" {} + _Tex2 ("Base2 (RGB) Trans (A)", 2D) = "black" {} + } + SubShader { + Pass { + Tags {"Queue"="Background" "IgnoreProjector"="True" "RenderType"="Background"} + ZWrite Off + Cull Off + Fog { Mode Off } + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + sampler2D _MainTex; + sampler2D _Tex2; + + struct appdata { + float4 vertex : POSITION; + float2 texcoord : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + struct v2f { + float4 pos : POSITION; + float2 texcoord : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + float4 _MainTex_ST; + float4 _Tex2_ST; + + v2f vert (appdata v) + { + v2f o; + o.texcoord = v.texcoord; + o.texcoord1 = v.texcoord1; + o.pos = v.vertex; +#if UNITY_UV_STARTS_AT_TOP + o.pos.y = -o.pos.y; +#endif + +#if SHADER_API_D3D9 || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_GLCORE + o.pos.z = 1; +#else + o.pos.z = 0; +#endif + o.pos.w = 1; + return o; + } + + half4 frag (v2f i) : COLOR + { + half4 col1 = tex2D(_MainTex, i.texcoord); + half4 col2 = tex2D(_Tex2, i.texcoord1); + col1.rgb *= col1.a; + col1.rgb *= (1-col2.a); + col2.rgb *= col2.a; + col1.a = 1; + col2.a = 1; + return col1 + col2; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader.meta b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader.meta new file mode 100644 index 0000000..18b114e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/FullScreen.shader.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 3215886e81b218d41a9de58c554442c0 +ShaderImporter: + defaultTextures: [] + userData: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab new file mode 100644 index 0000000..dc3ca2e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 400000} + - component: {fileID: 2000000} + m_Layer: 5 + m_Name: RenderImageCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &400000 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.41} + 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!20 &2000000 +Camera: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 50 + field of view: 28 + orthographic: 0 + orthographic size: 100 + m_Depth: 0 + 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: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 100000} + m_IsPrefabParent: 1 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab.meta new file mode 100644 index 0000000..dba3697 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/RenderTexture/RenderImageCamera.prefab.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: e1401866bdaef3a41b64115e2896151d +NativeFormatImporter: + userData: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role.meta new file mode 100644 index 0000000..6e65624 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 02aaf8cbdc6ad5649adb67721d2a8546 +folderAsset: yes +timeCreated: 1446196284 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials.meta new file mode 100644 index 0000000..4249f07 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 04ea8ad1eb97b764b9deffc1d03922ae +folderAsset: yes +timeCreated: 1445931749 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader new file mode 100644 index 0000000..93ed08e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader @@ -0,0 +1,122 @@ +// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "Game/Role/Role-Diffuse" { + Properties { + _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {} + + _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 + + _LightDir_0 ("Light0 direction", Vector) = (0.6, -0.8, 0.2, 1.0) + _LightColor_0 ("Light0 color", Color) = (0.6196,0.5255,0.46275,1) + _LightIntensity_0 ("Light0 intensity", Range(0,8)) = 0.8 + + _LightDir_1 ("Light1 direction", Vector) = (-0.9, 0.5, 0.1, 1.0) + _LightColor_1 ("Light1 color", Color) = (0.2196,0.498,0.61176,1) + _LightIntensity_1 ("Light1 intensity", Range(0,8)) = 0.6 + + _RimColor ("Rim color", Color) = (0.4, 0.4, 0.4, 1) + _RimWidth ("Rim width", Range(0,1)) = 0.7 + + _Direction ("Direction", Range(-1,1)) = 1 + _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5 + } + + SubShader { + Pass { + Tags {"Queue"="AlphaTest" "IgnoreProjector"="True"} + AlphaTest Greater [_Cutoff] + Lighting Off + Fog {Mode Off} + Offset 0,-1 + Cull Back + ZWrite On + LOD 200 + + Stencil + { + Ref[_Stencil] + Comp[_StencilComp] + Pass[_StencilOp] + ReadMask[_StencilReadMask] + WriteMask[_StencilWriteMask] + } + + CGPROGRAM + #include "UnityCG.cginc" + #pragma exclude_renderers flash xbox360 ps3 + #pragma vertex vert + #pragma fragment frag + + sampler2D _MainTex; + float4 _LightDir_0; + float4 _LightColor_0; + float _LightIntensity_0; + float4 _LightDir_1; + float4 _LightColor_1; + float _LightIntensity_1; + float4 _RimColor; + float _RimWidth; + float _Direction; + + struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + float2 texcoord : TEXCOORD0; + }; + + struct v2f { + float4 pos : POSITION; + float2 texcoord : TEXCOORD0; + float4 posWorld : TEXCOORD1; + float3 normalDir : TEXCOORD2; + }; + + float4 _MainTex_ST; + + v2f vert(appdata v) { + v2f o; + float4x4 modelMatrix = unity_ObjectToWorld; + o.posWorld = mul(modelMatrix, v.vertex); + o.pos = UnityObjectToClipPos(v.vertex); + o.normalDir = normalize(mul(modelMatrix, float4(v.normal, 0.0)).xyz); + o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); + + float3 viewDir = normalize(ObjSpaceViewDir(v.vertex)); + float dotProduct = 1 - dot(v.normal, viewDir); + + return o; + } + + half4 frag(v2f i) :COLOR { + float3 normalDirection = normalize(i.normalDir); + float3 viewDirection = normalize(_WorldSpaceCameraPos - i.posWorld.xyz); + float3 cDir = float3(_Direction,1,1); + + float3 lightDirection0 = normalize(-_LightDir_0 * cDir); + float3 NDotL0 = max(0.0, dot(normalDirection, lightDirection0)); + float4 diffuseReflection0 = float4(_LightIntensity_0 * _LightColor_0.rgb * NDotL0, 1.0); + + float3 lightDirection1 = normalize(-_LightDir_1 * cDir); + float3 NDotL1 = max(0.0, dot(normalDirection, lightDirection1)); + float4 diffuseReflection1 = float4(_LightIntensity_1 * _LightColor_1.rgb * NDotL1, 1.0); + + float dotProduct = 1 - dot(normalDirection, viewDirection); + float4 rim = smoothstep(1 - _RimWidth, 1.0, dotProduct) * _RimColor; + + half4 tex = tex2D(_MainTex, i.texcoord); + half4 c = ((UNITY_LIGHTMODEL_AMBIENT + diffuseReflection0 + diffuseReflection1) * 2+ rim) * tex ; + c.a = tex.a; + return c; + } + ENDCG + } + } + FallBack "Diffuse" +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader.meta new file mode 100644 index 0000000..c0ee7dd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/Role-Diffuse.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 52a70f49fc8a3a64f813389512529ecb +timeCreated: 1547976858 +licenseType: Free +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat new file mode 100644 index 0000000..aad9348 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat @@ -0,0 +1,95 @@ +%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: U1NPC0040 + m_Shader: {fileID: 10708, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHAPREMULTIPLY_ON + m_LightmapFlags: 5 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + 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: 2800000, guid: 3c3eb5b459fd6d241afe2698a33268d9, type: 3} + 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} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.409 + - _DetailNormalMapScale: 1 + - _Direction: 1 + - _DstBlend: 10 + - _Glossiness: 0.5 + - _LightIntensity_0: 0.8 + - _LightIntensity_1: 0.6 + - _Metallic: 0 + - _Mode: 3 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RimWidth: 0.7 + - _Shininess: 0.078125 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _UseUIAlphaClip: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 0.588, g: 0.588, b: 0.588, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _LightColor_0: {r: 0.6196, g: 0.5255, b: 0.46275, a: 1} + - _LightColor_1: {r: 0.2196, g: 0.498, b: 0.61176, a: 1} + - _LightDir_0: {r: -0.44, g: -0.8, b: 0.2, a: 1} + - _LightDir_1: {r: -0.9, g: 0.5, b: 0.1, a: 1} + - _RimColor: {r: 0.4, g: 0.4, b: 0.4, a: 1} + - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat.meta new file mode 100644 index 0000000..665dce3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0040.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f610d32095a9f6f48b1ada37f0b76da2 +timeCreated: 1445931749 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat new file mode 100644 index 0000000..5dd7d42 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat @@ -0,0 +1,97 @@ +%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: U1NPC0041 + m_Shader: {fileID: 4800000, guid: 52a70f49fc8a3a64f813389512529ecb, type: 3} + m_ShaderKeywords: _ALPHAPREMULTIPLY_ON + m_LightmapFlags: 5 + 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: 2800000, guid: 3c3eb5b459fd6d241afe2698a33268d9, type: 3} + 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} + m_Floats: + - PixelSnap: 0 + - _BlendDstFactor: 10 + - _BlendSrcFactor: 5 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.409 + - _DetailNormalMapScale: 1 + - _Direction: 1 + - _DstBlend: 10 + - _Glossiness: 0.5 + - _LightIntensity_0: 0.8 + - _LightIntensity_1: 0.6 + - _Metallic: 0 + - _Mode: 3 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RimWidth: 0.7 + - _Shininess: 0.078125 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _UseUIAlphaClip: 0 + - _ZWrite: 0 + m_Colors: + - _Color: {r: 0.588, g: 0.588, b: 0.588, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _LightColor_0: {r: 0.6196, g: 0.5255, b: 0.46275, a: 1} + - _LightColor_1: {r: 0.2196, g: 0.498, b: 0.61176, a: 1} + - _LightDir_0: {r: -0.44, g: -0.8, b: 0.2, a: 1} + - _LightDir_1: {r: -0.9, g: 0.5, b: 0.1, a: 1} + - _RimColor: {r: 0.4, g: 0.4, b: 0.4, a: 1} + - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat.meta new file mode 100644 index 0000000..7729e97 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Materials/U1NPC0041.mat.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fae8465b71b8eca4fbea8d86dbc01e03 +timeCreated: 1547976442 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures.meta new file mode 100644 index 0000000..041220a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 67a92a39217a34d40b581e69a3154c0a +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga new file mode 100644 index 0000000..f62879e Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga.meta new file mode 100644 index 0000000..d4052be --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/Textures/U1NPC0040.tga.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 3c3eb5b459fd6d241afe2698a33268d9 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: 5 + maxTextureSize: 256 + textureSettings: + filterMode: 1 + aniso: 0 + mipBias: -1 + wrapMode: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab new file mode 100644 index 0000000..bfb7aa4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab @@ -0,0 +1,3364 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100528 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 440488} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &101302 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 441226} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &102214 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 486672} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &102558 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 416452} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &102962 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 451288} + m_Layer: 0 + m_Name: UI(AutoGenerated) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &103494 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 491140} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &103806 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 411770} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &105358 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 429552} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &105878 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 468818} + - component: {fileID: 3335386} + - component: {fileID: 2395278} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &106810 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 438748} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &108268 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 470766} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &111914 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 446010} + m_Layer: 0 + m_Name: HtmlImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &112358 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 420478} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &112420 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 478466} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &113498 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 420058} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &114450 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 408140} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &114880 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 431022} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &116510 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 414286} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &120078 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 469854} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &120122 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 452528} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &120432 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 469362} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &120696 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 476772} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &120864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 452364} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &120884 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 402382} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &123680 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 481796} + - component: {fileID: 13701610} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &123700 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 416996} + m_Layer: 0 + m_Name: GLoader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &125500 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 443362} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &125816 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 435198} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &126210 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 461516} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &127328 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 472208} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &128470 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 403624} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &128560 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 482094} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &129244 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 466946} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &129668 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 491028} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &130556 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 420360} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &133836 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 471058} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &136138 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 410744} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &138306 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 493882} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &138344 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 463980} + - component: {fileID: 11424352} + m_Layer: 0 + m_Name: HeadBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &138958 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 451690} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &139896 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 455540} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &140366 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 402504} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &140522 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 417878} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &141126 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 489022} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &141606 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 449420} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &141764 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 414740} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &143388 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 422054} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &144858 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 481000} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &145200 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 481892} + - component: {fileID: 3337002} + - component: {fileID: 2319432} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &146052 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 480772} + - component: {fileID: 3361542} + - component: {fileID: 2379406} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &146794 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 421104} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &146884 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 463114} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &148306 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 467964} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &148782 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 498232} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &149264 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 402696} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &150964 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 445030} + m_Layer: 0 + m_Name: RichTextField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &150992 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 482740} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &151004 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 483072} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &153078 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 480466} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &153184 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 442382} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &153212 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 472940} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &154544 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 401828} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &154602 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 425774} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &154676 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 402838} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &154848 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 481764} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &155972 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 455924} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &156516 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 436710} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &157032 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 431364} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &158496 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 462730} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &159156 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 408886} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &159454 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 491800} + - component: {fileID: 3395100} + - component: {fileID: 2329174} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &161144 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 487672} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &161278 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 480520} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &161578 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 454386} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &164450 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 445936} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &167814 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 440760} + m_Layer: 0 + m_Name: bloodbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &173056 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 422622} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &176276 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 479794} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &176862 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 404802} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &178132 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 489938} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &180566 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 490418} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &180812 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 431000} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &182930 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 465700} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &183646 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 422792} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &184018 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 459386} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &184204 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 405538} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &186168 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 421276} + - component: {fileID: 3322010} + - component: {fileID: 2324568} + m_Layer: 0 + m_Name: TextField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &187254 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 458440} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &188824 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 423924} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &190048 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 412228} + - component: {fileID: 11136530} + m_Layer: 0 + m_Name: npc-with-hud + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &190106 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 493204} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &191368 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 478478} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &194228 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 444480} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &194840 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 431592} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &194910 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 441316} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &195480 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 458130} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &195570 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 460888} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &195700 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 459326} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &196042 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 471658} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &196556 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 453180} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &198734 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 420894} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &199998 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 487314} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &401828 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 154544} + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_Children: [] + m_Father: {fileID: 431364} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &402382 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 120884} + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_Children: + - {fileID: 483072} + m_Father: {fileID: 470766} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &402504 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 140366} + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 425774} + m_Father: {fileID: 441316} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &402696 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 149264} + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 466946} + m_Father: {fileID: 420058} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &402838 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 154676} + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_Children: + - {fileID: 408886} + m_Father: {fileID: 438748} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &403624 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 128470} + m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 449420} + m_Father: {fileID: 489938} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &404802 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 176862} + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 438748} + m_Father: {fileID: 489938} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &405538 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 184204} + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_Children: + - {fileID: 441316} + m_Father: {fileID: 478466} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &408140 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 114450} + m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_Children: + - {fileID: 444480} + m_Father: {fileID: 476772} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &408886 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 159156} + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_Children: [] + m_Father: {fileID: 402838} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &410744 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 136138} + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 481764} + m_Father: {fileID: 440488} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &411770 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 103806} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 412228} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &412228 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 190048} + m_LocalRotation: {x: 0, y: 0.7291566, z: 0, w: 0.68434685} + m_LocalPosition: {x: 250, y: 0, z: 305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 481796} + - {fileID: 411770} + - {fileID: 479794} + - {fileID: 420894} + - {fileID: 463980} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &414286 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 116510} + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 431592} + m_Father: {fileID: 478466} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &414740 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141764} + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: + - {fileID: 441226} + m_Father: {fileID: 453180} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &416452 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 102558} + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_Children: + - {fileID: 461516} + m_Father: {fileID: 458130} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &416996 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 123700} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 47, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 468818} + m_Father: {fileID: 451288} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &417878 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 140522} + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_Children: + - {fileID: 482740} + m_Father: {fileID: 431000} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &420058 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 113498} + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_Children: + - {fileID: 402696} + m_Father: {fileID: 421104} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &420360 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 130556} + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 491140} + m_Father: {fileID: 471058} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &420478 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 112358} + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 422792} + m_Father: {fileID: 476772} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &420894 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 198734} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 412228} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &421104 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 146794} + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_Children: + - {fileID: 420058} + m_Father: {fileID: 472208} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &421276 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 186168} + 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: 445030} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &422054 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 143388} + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_Children: [] + m_Father: {fileID: 479794} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &422622 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 173056} + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_Children: + - {fileID: 423924} + m_Father: {fileID: 472208} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &422792 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 183646} + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 471658} + m_Father: {fileID: 420478} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &423924 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 188824} + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_Children: + - {fileID: 452364} + m_Father: {fileID: 422622} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &425774 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 154602} + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 402504} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &429552 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 105358} + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_Children: + - {fileID: 476772} + m_Father: {fileID: 483072} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &431000 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 180812} + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_Children: + - {fileID: 417878} + m_Father: {fileID: 479794} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &431022 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 114880} + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 443362} + m_Father: {fileID: 480520} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &431364 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 157032} + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 401828} + m_Father: {fileID: 493882} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &431592 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194840} + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_Children: + - {fileID: 482094} + m_Father: {fileID: 414286} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &435198 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 125816} + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_Children: [] + m_Father: {fileID: 493204} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &436710 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 156516} + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 480520} + m_Father: {fileID: 476772} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &438748 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 106810} + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_Children: + - {fileID: 402838} + m_Father: {fileID: 404802} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &440488 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100528} + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 410744} + m_Father: {fileID: 451690} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &440760 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 167814} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -86, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 491800} + - {fileID: 481892} + m_Father: {fileID: 451288} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &441226 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 101302} + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_Children: [] + m_Father: {fileID: 414740} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &441316 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194910} + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 402504} + m_Father: {fileID: 405538} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &442382 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 153184} + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: [] + m_Father: {fileID: 491140} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &443362 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 125500} + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_Children: [] + m_Father: {fileID: 431022} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &444480 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 194228} + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 489022} + m_Father: {fileID: 408140} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &445030 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 150964} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -33, y: -56, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 421276} + - {fileID: 446010} + m_Father: {fileID: 451288} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &445936 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 164450} + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_Children: [] + m_Father: {fileID: 458440} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &446010 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 111914} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 114, y: -2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 480772} + m_Father: {fileID: 445030} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &449420 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141606} + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 460888} + m_Father: {fileID: 403624} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &451288 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 102962} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -72.5, y: 106, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 440760} + - {fileID: 416996} + - {fileID: 445030} + m_Father: {fileID: 463980} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &451690 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 138958} + m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 440488} + m_Father: {fileID: 478466} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &452364 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 120864} + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_Children: + - {fileID: 458440} + m_Father: {fileID: 423924} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &452528 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 120122} + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 469854} + m_Father: {fileID: 459386} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &453180 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 196556} + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 414740} + m_Father: {fileID: 481000} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &454386 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161578} + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 469854} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &455540 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 139896} + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 469362} + m_Father: {fileID: 478466} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &455924 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 155972} + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 463114} + m_Father: {fileID: 469362} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &458130 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 195480} + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_Children: + - {fileID: 416452} + m_Father: {fileID: 487314} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &458440 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 187254} + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_Children: + - {fileID: 445936} + m_Father: {fileID: 452364} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &459326 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 195700} + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_Children: [] + m_Father: {fileID: 460888} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &459386 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 184018} + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 452528} + m_Father: {fileID: 478466} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &460888 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 195570} + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 459326} + m_Father: {fileID: 449420} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &461516 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 126210} + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: [] + m_Father: {fileID: 416452} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &462730 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 158496} + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_Children: + - {fileID: 478466} + m_Father: {fileID: 491028} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &463114 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 146884} + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 455924} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &463980 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 138344} + m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} + m_LocalPosition: {x: 0, y: 2.3, z: 0} + m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} + m_Children: + - {fileID: 451288} + m_Father: {fileID: 412228} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &465700 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 182930} + m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 470766} + m_Father: {fileID: 472208} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &466946 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 129244} + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 486672} + m_Father: {fileID: 402696} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &467964 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 148306} + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 482094} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &468818 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 105878} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1, y: -6, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 416996} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &469362 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 120432} + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_Children: + - {fileID: 455924} + m_Father: {fileID: 455540} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &469854 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 120078} + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: + - {fileID: 454386} + m_Father: {fileID: 452528} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &470766 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 108268} + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 493204} + - {fileID: 498232} + - {fileID: 402382} + m_Father: {fileID: 465700} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &471058 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 133836} + m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 420360} + m_Father: {fileID: 489938} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &471658 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 196042} + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_Children: + - {fileID: 487672} + m_Father: {fileID: 422792} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &472208 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 127328} + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: + - {fileID: 422622} + - {fileID: 421104} + - {fileID: 465700} + m_Father: {fileID: 489938} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &472940 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 153212} + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_Children: [] + m_Father: {fileID: 489022} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &476772 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 120696} + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_Children: + - {fileID: 478478} + - {fileID: 481000} + - {fileID: 408140} + - {fileID: 436710} + - {fileID: 420478} + m_Father: {fileID: 429552} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &478466 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 112420} + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 414286} + - {fileID: 455540} + - {fileID: 451690} + - {fileID: 459386} + - {fileID: 405538} + m_Father: {fileID: 462730} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &478478 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 191368} + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: + - {fileID: 493882} + m_Father: {fileID: 476772} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &479794 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 176276} + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: + - {fileID: 422054} + - {fileID: 489938} + - {fileID: 431000} + m_Father: {fileID: 412228} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &480466 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 153078} + m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_Children: [] + m_Father: {fileID: 490418} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &480520 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161278} + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 431022} + m_Father: {fileID: 436710} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &480772 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 146052} + 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: 446010} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &481000 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 144858} + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_Children: + - {fileID: 453180} + m_Father: {fileID: 476772} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &481764 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 154848} + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: [] + m_Father: {fileID: 410744} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &481796 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 123680} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 412228} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &481892 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 145200} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 11, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 440760} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &482094 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 128560} + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_Children: + - {fileID: 467964} + m_Father: {fileID: 431592} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &482740 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 150992} + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 490418} + m_Father: {fileID: 417878} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &483072 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 151004} + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_Children: + - {fileID: 429552} + m_Father: {fileID: 402382} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &486672 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 102214} + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 466946} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &487314 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 199998} + m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 458130} + m_Father: {fileID: 489938} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &487672 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 161144} + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_Children: [] + m_Father: {fileID: 471658} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &489022 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141126} + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 472940} + m_Father: {fileID: 444480} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &489938 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 178132} + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 472208} + - {fileID: 404802} + - {fileID: 403624} + - {fileID: 471058} + - {fileID: 487314} + m_Father: {fileID: 479794} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &490418 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 180566} + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 480466} + m_Father: {fileID: 482740} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &491028 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 129668} + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_Children: + - {fileID: 462730} + m_Father: {fileID: 498232} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &491140 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 103494} + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_Children: + - {fileID: 442382} + m_Father: {fileID: 420360} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &491800 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 159454} + 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: 440760} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &493204 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 190106} + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: + - {fileID: 435198} + m_Father: {fileID: 470766} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &493882 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 138306} + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_Children: + - {fileID: 431364} + m_Father: {fileID: 478478} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &498232 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 148782} + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: + - {fileID: 491028} + m_Father: {fileID: 470766} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2319432 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 145200} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 0} + 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_StitchLightmapSeams: 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: 3 +--- !u!23 &2324568 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 186168} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 0} + 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_StitchLightmapSeams: 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: 7 +--- !u!23 &2329174 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 159454} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 0} + 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_StitchLightmapSeams: 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: 2 +--- !u!23 &2379406 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 146052} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 0} + 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_StitchLightmapSeams: 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: 9 +--- !u!23 &2395278 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 105878} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_Materials: + - {fileID: 0} + 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_StitchLightmapSeams: 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: 5 +--- !u!33 &3322010 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 186168} + m_Mesh: {fileID: 0} +--- !u!33 &3335386 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 105878} + m_Mesh: {fileID: 0} +--- !u!33 &3337002 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 145200} + m_Mesh: {fileID: 0} +--- !u!33 &3361542 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 146052} + m_Mesh: {fileID: 0} +--- !u!33 &3395100 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 159454} + m_Mesh: {fileID: 0} +--- !u!111 &11136530 +Animation: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 190048} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!114 &11424352 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 138344} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: HeadBar + componentName: HeadBar + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/HeadBar + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 145, y: 106} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!137 &13701610 +SkinnedMeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 123680} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, 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_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 465700} + - {fileID: 472208} + - {fileID: 402382} + - {fileID: 493204} + - {fileID: 498232} + - {fileID: 421104} + - {fileID: 489938} + - {fileID: 422622} + - {fileID: 483072} + - {fileID: 491028} + - {fileID: 404802} + - {fileID: 403624} + - {fileID: 471058} + - {fileID: 458130} + - {fileID: 487314} + - {fileID: 449420} + - {fileID: 420360} + - {fileID: 470766} + - {fileID: 462730} + - {fileID: 438748} + - {fileID: 416452} + - {fileID: 402838} + - {fileID: 478466} + - {fileID: 414286} + - {fileID: 431592} + - {fileID: 459386} + - {fileID: 405538} + - {fileID: 452528} + - {fileID: 441316} + - {fileID: 451690} + - {fileID: 440488} + - {fileID: 455540} + - {fileID: 469362} + - {fileID: 482094} + - {fileID: 455924} + - {fileID: 410744} + - {fileID: 469854} + - {fileID: 402504} + - {fileID: 461516} + - {fileID: 458440} + - {fileID: 452364} + - {fileID: 423924} + - {fileID: 408886} + - {fileID: 460888} + - {fileID: 459326} + - {fileID: 429552} + - {fileID: 476772} + - {fileID: 478478} + - {fileID: 493882} + - {fileID: 436710} + - {fileID: 420478} + - {fileID: 480520} + - {fileID: 422792} + - {fileID: 408140} + - {fileID: 444480} + - {fileID: 431364} + - {fileID: 481000} + - {fileID: 453180} + - {fileID: 489022} + - {fileID: 414740} + - {fileID: 431022} + - {fileID: 471658} + - {fileID: 402696} + - {fileID: 466946} + - {fileID: 420058} + - {fileID: 431000} + - {fileID: 491140} + - {fileID: 442382} + - {fileID: 417878} + - {fileID: 482740} + - {fileID: 490418} + - {fileID: 480466} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 489938} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} + m_DirtyAABB: 0 +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 0} + propertyPath: ObjectOnStage + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 0} + propertyPath: dummy + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 190048} + m_IsPrefabParent: 1 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab.meta new file mode 100644 index 0000000..e77f4ec --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc-with-hud.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67877f7eb74ad8d4b82029c02555173b +timeCreated: 1446568553 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX new file mode 100644 index 0000000..2d804a1 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX.meta new file mode 100644 index 0000000..25be426 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.FBX.meta @@ -0,0 +1,332 @@ +fileFormatVersion: 2 +guid: 87d06d04f2d65d9428debc0b3b5bf4e2 +ModelImporter: + serializedVersion: 22 + fileIDToRecycleName: + 100000: //RootNode + 100002: BipU1NPC0040 + 100004: BipU1NPC0040 Footsteps + 100006: BipU1NPC0040 Head + 100008: BipU1NPC0040 HeadNub + 100010: BipU1NPC0040 L Calf + 100012: BipU1NPC0040 L Clavicle + 100014: BipU1NPC0040 L Finger0 + 100016: BipU1NPC0040 L Finger01 + 100018: BipU1NPC0040 L Finger02 + 100020: BipU1NPC0040 L Finger0Nub + 100022: BipU1NPC0040 L Finger1 + 100024: BipU1NPC0040 L Finger11 + 100026: BipU1NPC0040 L Finger12 + 100028: BipU1NPC0040 L Finger1Nub + 100030: BipU1NPC0040 L Finger2 + 100032: BipU1NPC0040 L Finger21 + 100034: BipU1NPC0040 L Finger22 + 100036: BipU1NPC0040 L Finger2Nub + 100038: BipU1NPC0040 L Finger3 + 100040: BipU1NPC0040 L Finger31 + 100042: BipU1NPC0040 L Finger32 + 100044: BipU1NPC0040 L Finger3Nub + 100046: BipU1NPC0040 L Finger4 + 100048: BipU1NPC0040 L Finger41 + 100050: BipU1NPC0040 L Finger42 + 100052: BipU1NPC0040 L Finger4Nub + 100054: BipU1NPC0040 L Foot + 100056: BipU1NPC0040 L Forearm + 100058: BipU1NPC0040 L Hand + 100060: BipU1NPC0040 L Thigh + 100062: BipU1NPC0040 L Toe0 + 100064: BipU1NPC0040 L Toe0Nub + 100066: BipU1NPC0040 L UpperArm + 100068: BipU1NPC0040 Neck + 100070: BipU1NPC0040 Pelvis + 100072: BipU1NPC0040 Prop1 + 100074: BipU1NPC0040 R Calf + 100076: BipU1NPC0040 R Clavicle + 100078: BipU1NPC0040 R Finger0 + 100080: BipU1NPC0040 R Finger01 + 100082: BipU1NPC0040 R Finger02 + 100084: BipU1NPC0040 R Finger0Nub + 100086: BipU1NPC0040 R Finger1 + 100088: BipU1NPC0040 R Finger11 + 100090: BipU1NPC0040 R Finger12 + 100092: BipU1NPC0040 R Finger1Nub + 100094: BipU1NPC0040 R Finger2 + 100096: BipU1NPC0040 R Finger21 + 100098: BipU1NPC0040 R Finger22 + 100100: BipU1NPC0040 R Finger2Nub + 100102: BipU1NPC0040 R Finger3 + 100104: BipU1NPC0040 R Finger31 + 100106: BipU1NPC0040 R Finger32 + 100108: BipU1NPC0040 R Finger3Nub + 100110: BipU1NPC0040 R Finger4 + 100112: BipU1NPC0040 R Finger41 + 100114: BipU1NPC0040 R Finger42 + 100116: BipU1NPC0040 R Finger4Nub + 100118: BipU1NPC0040 R Foot + 100120: BipU1NPC0040 R Forearm + 100122: BipU1NPC0040 R Hand + 100124: BipU1NPC0040 R Thigh + 100126: BipU1NPC0040 R Toe0 + 100128: BipU1NPC0040 R Toe0Nub + 100130: BipU1NPC0040 R UpperArm + 100132: BipU1NPC0040 Spine + 100134: BipU1NPC0040 Spine1 + 100136: BoneU1NPC0040_00 + 100138: BoneU1NPC0040_01 + 100140: BoneU1NPC0040_02 + 100142: BoneU1NPC0040_03 + 100144: BoneU1NPC0040_04 + 100146: BoneU1NPC0040_05 + 100148: BoneU1NPC0040_06 + 100150: BoneU1NPC0040_07 + 100152: BoneU1NPC0040_08 + 100154: BoneU1NPC0040_09 + 100156: BoneU1NPC0040_10 + 100158: BoneU1NPC0040_11 + 100160: BoneU1NPC0040_12 + 100162: BoneU1NPC0040_13 + 100164: BoneU1NPC0040_14 + 100166: BoneU1NPC0040_15 + 100168: BoneU1NPC0040_16 + 100170: BoneU1NPC0040_17 + 100172: BoneU1NPC0040_18 + 100174: BoneU1NPC0040_19 + 100176: Particle View 01 1 + 100178: Particle View 01 + 100180: U1NPC0040 + 400000: //RootNode + 400002: BipU1NPC0040 + 400004: BipU1NPC0040 Footsteps + 400006: BipU1NPC0040 Head + 400008: BipU1NPC0040 HeadNub + 400010: BipU1NPC0040 L Calf + 400012: BipU1NPC0040 L Clavicle + 400014: BipU1NPC0040 L Finger0 + 400016: BipU1NPC0040 L Finger01 + 400018: BipU1NPC0040 L Finger02 + 400020: BipU1NPC0040 L Finger0Nub + 400022: BipU1NPC0040 L Finger1 + 400024: BipU1NPC0040 L Finger11 + 400026: BipU1NPC0040 L Finger12 + 400028: BipU1NPC0040 L Finger1Nub + 400030: BipU1NPC0040 L Finger2 + 400032: BipU1NPC0040 L Finger21 + 400034: BipU1NPC0040 L Finger22 + 400036: BipU1NPC0040 L Finger2Nub + 400038: BipU1NPC0040 L Finger3 + 400040: BipU1NPC0040 L Finger31 + 400042: BipU1NPC0040 L Finger32 + 400044: BipU1NPC0040 L Finger3Nub + 400046: BipU1NPC0040 L Finger4 + 400048: BipU1NPC0040 L Finger41 + 400050: BipU1NPC0040 L Finger42 + 400052: BipU1NPC0040 L Finger4Nub + 400054: BipU1NPC0040 L Foot + 400056: BipU1NPC0040 L Forearm + 400058: BipU1NPC0040 L Hand + 400060: BipU1NPC0040 L Thigh + 400062: BipU1NPC0040 L Toe0 + 400064: BipU1NPC0040 L Toe0Nub + 400066: BipU1NPC0040 L UpperArm + 400068: BipU1NPC0040 Neck + 400070: BipU1NPC0040 Pelvis + 400072: BipU1NPC0040 Prop1 + 400074: BipU1NPC0040 R Calf + 400076: BipU1NPC0040 R Clavicle + 400078: BipU1NPC0040 R Finger0 + 400080: BipU1NPC0040 R Finger01 + 400082: BipU1NPC0040 R Finger02 + 400084: BipU1NPC0040 R Finger0Nub + 400086: BipU1NPC0040 R Finger1 + 400088: BipU1NPC0040 R Finger11 + 400090: BipU1NPC0040 R Finger12 + 400092: BipU1NPC0040 R Finger1Nub + 400094: BipU1NPC0040 R Finger2 + 400096: BipU1NPC0040 R Finger21 + 400098: BipU1NPC0040 R Finger22 + 400100: BipU1NPC0040 R Finger2Nub + 400102: BipU1NPC0040 R Finger3 + 400104: BipU1NPC0040 R Finger31 + 400106: BipU1NPC0040 R Finger32 + 400108: BipU1NPC0040 R Finger3Nub + 400110: BipU1NPC0040 R Finger4 + 400112: BipU1NPC0040 R Finger41 + 400114: BipU1NPC0040 R Finger42 + 400116: BipU1NPC0040 R Finger4Nub + 400118: BipU1NPC0040 R Foot + 400120: BipU1NPC0040 R Forearm + 400122: BipU1NPC0040 R Hand + 400124: BipU1NPC0040 R Thigh + 400126: BipU1NPC0040 R Toe0 + 400128: BipU1NPC0040 R Toe0Nub + 400130: BipU1NPC0040 R UpperArm + 400132: BipU1NPC0040 Spine + 400134: BipU1NPC0040 Spine1 + 400136: BoneU1NPC0040_00 + 400138: BoneU1NPC0040_01 + 400140: BoneU1NPC0040_02 + 400142: BoneU1NPC0040_03 + 400144: BoneU1NPC0040_04 + 400146: BoneU1NPC0040_05 + 400148: BoneU1NPC0040_06 + 400150: BoneU1NPC0040_07 + 400152: BoneU1NPC0040_08 + 400154: BoneU1NPC0040_09 + 400156: BoneU1NPC0040_10 + 400158: BoneU1NPC0040_11 + 400160: BoneU1NPC0040_12 + 400162: BoneU1NPC0040_13 + 400164: BoneU1NPC0040_14 + 400166: BoneU1NPC0040_15 + 400168: BoneU1NPC0040_16 + 400170: BoneU1NPC0040_17 + 400172: BoneU1NPC0040_18 + 400174: BoneU1NPC0040_19 + 400176: Particle View 01 1 + 400178: Particle View 01 + 400180: U1NPC0040 + 4300000: U1NPC0040 + 7400000: base@idle_z1 + 7400002: base@idle_z2 + 11100000: //RootNode + 13700000: //RootNode + 13700002: U1NPC0040 + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: U1NPC0040 + second: {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 0 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + animationCompression: 2 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: base@idle_z1 + takeName: + firstFrame: 1 + lastFrame: 61 + wrapMode: 2 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + - serializedVersion: 16 + name: base@idle_z2 + takeName: + firstFrame: 71 + lastFrame: 135 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 0 + importBlendShapes: 1 + importCameras: 0 + importLights: 0 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 4 + normalCalculationMode: 0 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 1 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab new file mode 100644 index 0000000..59d5535 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab @@ -0,0 +1,2795 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1150075176140312} + m_IsPrefabParent: 1 +--- !u!1 &1010404982028000 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4286742660426598} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1059218261172526 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4672451955769334} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1059379632462168 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4206757148000588} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1067117516360930 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4227937933469064} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1071057782414660 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4830860581344014} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1072597780765718 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4539816768824420} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1078478601437546 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4708610203189916} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1135460126913090 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4361978516921126} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1140253994452182 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4241094239306508} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1146300402992766 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4884672185996232} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1150075176140312 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4490259505578878} + - component: {fileID: 111666040288003186} + m_Layer: 0 + m_Name: npc + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1175560894121072 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4594310559806118} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1211018038989970 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4883958064838778} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1223994741929324 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4018078701669832} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1228119985909526 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4926157802774422} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1230450992769040 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4049452316068636} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1242315613069768 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4914943240201416} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1249896763784558 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4651692131757780} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1276819018595210 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4519628157740566} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1279178513536234 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4471665224973970} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1302887464771196 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4507225610043402} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1327037363249190 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4905368652293968} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1346049463988820 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4132173377954600} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1358265541489608 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4242575875878994} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1378262311794920 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4735972335878104} + - component: {fileID: 137001305767814332} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1383426941052994 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4941669013278794} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1394043320779632 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4768597039440366} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1435367911033436 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4222922947366276} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1450240092370900 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4077061754157946} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1457829413905422 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4774774915941070} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1461224286221150 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4558383211953496} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1463783122563160 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4514397939338246} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1466185034251980 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4369439259323886} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1469159043005404 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4402573559092728} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1480066599042308 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4237538198175074} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1491368564064446 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4748391031702748} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1495084127033132 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4298066619836676} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1499121026593800 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4670420799516482} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1511084918428596 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4597284278799572} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1534622683209196 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4129924974715750} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1534815798563810 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4334758250849932} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1555432860051452 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4212261233308806} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1570490740816210 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4119286177475372} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1585427440741598 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4772739930438904} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1586687326074116 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4592198057749092} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1593232354702004 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4108724387687140} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1607737375089906 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4218673413120388} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1611608646356222 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4024492227062350} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1615549402128192 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4715852658799120} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1615973451911864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4741963489460462} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1633748573770202 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4245588526158778} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1634366814065108 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4355950095109032} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1656036028183870 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4892578489063060} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1668925066032506 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4197182265065022} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1672010311922786 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4991231530613518} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1672554701315912 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4075566800663240} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1687387406118398 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4732551661033212} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1689864009635666 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4781295074042782} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1693919613554156 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4459599931419054} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1694470935162810 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4993297944847610} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1704716674304470 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4160062110373730} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1705054790548186 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4198636148412806} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1707689860730350 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4136798552964460} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1713922177020308 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4789066211853810} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1722249510381470 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4146166128820228} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1735913267372192 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4007654423138198} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1737719886252514 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4225328472586460} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1756067799405304 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4948931464359600} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1765931078757778 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4052819782918204} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1769112418882430 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4280321952613922} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1775557559707370 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4283143979009394} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1781741348880706 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4683287682251894} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1790239854485172 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4169132998361604} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1797313834521158 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4382734894443346} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1802124568840748 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4432749068542684} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1818762075854664 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4399450937874530} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1848536345837664 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4301028178895886} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1853625800880806 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4143224262009474} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1865634291331264 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4540201712874252} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1873158203567434 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4928934790995212} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1884133590710864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4860895689742166} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1884835152854118 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4306544925298146} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1888737124121322 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4181030785455488} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1890491245204348 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4447875865037570} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1903085340696336 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4594775044774486} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1903843755203422 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4677287491005038} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1917347220285920 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4231299221006758} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1934739608877382 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4212320446741038} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1935096534905822 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4917392242776758} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1951799514151002 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4550370854140754} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1980847113902110 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4268807291916800} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4007654423138198 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1735913267372192} + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4245588526158778} + m_Father: {fileID: 4748391031702748} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4018078701669832 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1223994741929324} + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_Children: + - {fileID: 4748391031702748} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4024492227062350 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1611608646356222} + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4169132998361604} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4049452316068636 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1230450992769040} + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 4241094239306508} + m_Father: {fileID: 4143224262009474} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4052819782918204 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1765931078757778} + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 4077061754157946} + m_Father: {fileID: 4382734894443346} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4075566800663240 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1672554701315912} + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4218673413120388} + m_Father: {fileID: 4181030785455488} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4077061754157946 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1450240092370900} + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4242575875878994} + m_Father: {fileID: 4052819782918204} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4108724387687140 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1593232354702004} + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4670420799516482} + m_Father: {fileID: 4741963489460462} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4119286177475372 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1570490740816210} + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_Children: + - {fileID: 4471665224973970} + - {fileID: 4715852658799120} + - {fileID: 4382734894443346} + - {fileID: 4132173377954600} + - {fileID: 4268807291916800} + m_Father: {fileID: 4892578489063060} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4129924974715750 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1534622683209196} + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4732551661033212} + - {fileID: 4708610203189916} + - {fileID: 4651692131757780} + - {fileID: 4181030785455488} + - {fileID: 4860895689742166} + m_Father: {fileID: 4774774915941070} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4132173377954600 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1346049463988820} + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 4198636148412806} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4136798552964460 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1707689860730350} + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4212261233308806} + m_Father: {fileID: 4432749068542684} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4143224262009474 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853625800880806} + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4049452316068636} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4146166128820228 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1722249510381470} + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_Children: + - {fileID: 4206757148000588} + m_Father: {fileID: 4597284278799572} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4160062110373730 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1704716674304470} + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_Children: + - {fileID: 4914943240201416} + m_Father: {fileID: 4732551661033212} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4169132998361604 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1790239854485172} + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 4024492227062350} + m_Father: {fileID: 4225328472586460} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4181030785455488 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1888737124121322} + m_LocalRotation: {x: 0.14481032, y: 0.7232496, z: 0.67084324, w: -0.0768724} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4075566800663240} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4197182265065022 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1668925066032506} + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_Children: + - {fileID: 4592198057749092} + m_Father: {fileID: 4772739930438904} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4198636148412806 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705054790548186} + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4768597039440366} + m_Father: {fileID: 4132173377954600} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4206757148000588 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1059379632462168} + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_Children: [] + m_Father: {fileID: 4146166128820228} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4212261233308806 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1555432860051452} + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_Children: [] + m_Father: {fileID: 4136798552964460} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4212320446741038 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1934739608877382} + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4519628157740566} + m_Father: {fileID: 4283143979009394} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4218673413120388 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1607737375089906} + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_Children: + - {fileID: 4222922947366276} + m_Father: {fileID: 4075566800663240} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4222922947366276 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1435367911033436} + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: [] + m_Father: {fileID: 4218673413120388} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4225328472586460 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1737719886252514} + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_Children: + - {fileID: 4169132998361604} + m_Father: {fileID: 4948931464359600} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4227937933469064 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1067117516360930} + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4298066619836676} + m_Father: {fileID: 4789066211853810} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4231299221006758 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1917347220285920} + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4286742660426598} + m_Father: {fileID: 4594310559806118} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4237538198175074 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1480066599042308} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4490259505578878} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4241094239306508 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1140253994452182} + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4884672185996232} + m_Father: {fileID: 4049452316068636} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4242575875878994 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1358265541489608} + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_Children: [] + m_Father: {fileID: 4077061754157946} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4245588526158778 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1633748573770202} + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 4007654423138198} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4268807291916800 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1980847113902110} + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4683287682251894} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4280321952613922 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1769112418882430} + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_Children: [] + m_Father: {fileID: 4677287491005038} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4283143979009394 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1775557559707370} + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 4212320446741038} + m_Father: {fileID: 4715852658799120} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4286742660426598 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1010404982028000} + m_LocalRotation: {x: -0.00030686986, y: -0.014894295, z: -0.012759085, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_Children: [] + m_Father: {fileID: 4231299221006758} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4298066619836676 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1495084127033132} + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_Children: + - {fileID: 4334758250849932} + m_Father: {fileID: 4227937933469064} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4301028178895886 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1848536345837664} + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_Children: + - {fileID: 4991231530613518} + m_Father: {fileID: 4306544925298146} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4306544925298146 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1884835152854118} + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_Children: + - {fileID: 4301028178895886} + m_Father: {fileID: 4860895689742166} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4334758250849932 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1534815798563810} + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4917392242776758} + - {fileID: 4948931464359600} + - {fileID: 4514397939338246} + - {fileID: 4143224262009474} + - {fileID: 4018078701669832} + m_Father: {fileID: 4298066619836676} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4355950095109032 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1634366814065108} + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: + - {fileID: 4672451955769334} + m_Father: {fileID: 4928934790995212} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4361978516921126 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1135460126913090} + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4539816768824420} + m_Father: {fileID: 4514397939338246} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4369439259323886 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1466185034251980} + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_Children: + - {fileID: 4892578489063060} + m_Father: {fileID: 4830860581344014} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4382734894443346 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1797313834521158} + m_LocalRotation: {x: 0.07039445, y: 0.011170968, z: -0.3130863, w: 0.9470464} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_Children: + - {fileID: 4052819782918204} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4399450937874530 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1818762075854664} + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_Children: + - {fileID: 4594310559806118} + m_Father: {fileID: 4550370854140754} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4402573559092728 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1469159043005404} + m_LocalRotation: {x: -0.027678797, y: 0.014816013, z: 0.03905903, w: 0.99874365} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4928934790995212} + m_Father: {fileID: 4732551661033212} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4432749068542684 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1802124568840748} + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4136798552964460} + m_Father: {fileID: 4651692131757780} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4447875865037570 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1890491245204348} + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: [] + m_Father: {fileID: 4539816768824420} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4459599931419054 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1693919613554156} + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_Children: + - {fileID: 4507225610043402} + m_Father: {fileID: 4941669013278794} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4471665224973970 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1279178513536234} + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4594775044774486} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4490259505578878 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1150075176140312} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 11.278667, y: -1.7827877, z: 6.118402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4774774915941070} + - {fileID: 4237538198175074} + - {fileID: 4540201712874252} + - {fileID: 4735972335878104} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4507225610043402 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1302887464771196} + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 4459599931419054} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4514397939338246 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1463783122563160} + m_LocalRotation: {x: -0.07039445, y: -0.011170963, z: -0.3130863, w: 0.9470464} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4361978516921126} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4519628157740566 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1276819018595210} + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_Children: [] + m_Father: {fileID: 4212320446741038} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4539816768824420 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1072597780765718} + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4447875865037570} + m_Father: {fileID: 4361978516921126} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4540201712874252 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1865634291331264} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4490259505578878} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4550370854140754 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1951799514151002} + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_Children: + - {fileID: 4399450937874530} + m_Father: {fileID: 4774774915941070} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4558383211953496 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1461224286221150} + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4781295074042782} + m_Father: {fileID: 4594775044774486} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4592198057749092 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1586687326074116} + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4905368652293968} + m_Father: {fileID: 4197182265065022} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4594310559806118 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1175560894121072} + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4231299221006758} + m_Father: {fileID: 4399450937874530} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4594775044774486 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903085340696336} + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_Children: + - {fileID: 4558383211953496} + m_Father: {fileID: 4471665224973970} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4597284278799572 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1511084918428596} + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_Children: + - {fileID: 4146166128820228} + m_Father: {fileID: 4914943240201416} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4651692131757780 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1249896763784558} + m_LocalRotation: {x: -0.034353625, y: 0.6956146, z: 0.70682585, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 4432749068542684} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4670420799516482 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1499121026593800} + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_Children: [] + m_Father: {fileID: 4108724387687140} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4672451955769334 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1059218261172526} + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_Children: [] + m_Father: {fileID: 4355950095109032} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4677287491005038 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903843755203422} + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_Children: + - {fileID: 4280321952613922} + m_Father: {fileID: 4683287682251894} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4683287682251894 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1781741348880706} + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 4677287491005038} + m_Father: {fileID: 4268807291916800} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4708610203189916 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1078478601437546} + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4741963489460462} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4715852658799120 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1615549402128192} + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_Children: + - {fileID: 4283143979009394} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4732551661033212 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1687387406118398} + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4160062110373730} + - {fileID: 4772739930438904} + - {fileID: 4402573559092728} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4735972335878104 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378262311794920} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4490259505578878} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4741963489460462 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1615973451911864} + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_Children: + - {fileID: 4108724387687140} + m_Father: {fileID: 4708610203189916} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4748391031702748 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1491368564064446} + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4007654423138198} + m_Father: {fileID: 4018078701669832} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4768597039440366 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1394043320779632} + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4883958064838778} + m_Father: {fileID: 4198636148412806} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4772739930438904 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585427440741598} + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_Children: + - {fileID: 4197182265065022} + m_Father: {fileID: 4732551661033212} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4774774915941070 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1457829413905422} + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4993297944847610} + - {fileID: 4129924974715750} + - {fileID: 4550370854140754} + m_Father: {fileID: 4490259505578878} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4781295074042782 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1689864009635666} + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_Children: [] + m_Father: {fileID: 4558383211953496} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4789066211853810 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1713922177020308} + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: + - {fileID: 4227937933469064} + m_Father: {fileID: 4928934790995212} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4830860581344014 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1071057782414660} + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_Children: + - {fileID: 4369439259323886} + m_Father: {fileID: 4928934790995212} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4860895689742166 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1884133590710864} + m_LocalRotation: {x: -0.0070472816, y: 0.7129379, z: -0.7009485, w: 0.018473662} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4306544925298146} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4883958064838778 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1211018038989970} + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_Children: [] + m_Father: {fileID: 4768597039440366} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4884672185996232 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1146300402992766} + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 4241094239306508} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4892578489063060 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1656036028183870} + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_Children: + - {fileID: 4119286177475372} + m_Father: {fileID: 4369439259323886} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4905368652293968 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1327037363249190} + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4926157802774422} + m_Father: {fileID: 4592198057749092} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4914943240201416 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1242315613069768} + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_Children: + - {fileID: 4597284278799572} + m_Father: {fileID: 4160062110373730} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4917392242776758 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1935096534905822} + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4941669013278794} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4926157802774422 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1228119985909526} + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 4905368652293968} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4928934790995212 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1873158203567434} + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4355950095109032} + - {fileID: 4789066211853810} + - {fileID: 4830860581344014} + m_Father: {fileID: 4402573559092728} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4941669013278794 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1383426941052994} + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_Children: + - {fileID: 4459599931419054} + m_Father: {fileID: 4917392242776758} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4948931464359600 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1756067799405304} + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4225328472586460} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4991231530613518 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1672010311922786} + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: [] + m_Father: {fileID: 4301028178895886} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4993297944847610 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694470935162810} + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_Children: [] + m_Father: {fileID: 4774774915941070} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!111 &111666040288003186 +Animation: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1150075176140312} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!137 &137001305767814332 +SkinnedMeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378262311794920} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, 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_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 4402573559092728} + - {fileID: 4732551661033212} + - {fileID: 4830860581344014} + - {fileID: 4355950095109032} + - {fileID: 4789066211853810} + - {fileID: 4772739930438904} + - {fileID: 4129924974715750} + - {fileID: 4160062110373730} + - {fileID: 4369439259323886} + - {fileID: 4227937933469064} + - {fileID: 4708610203189916} + - {fileID: 4651692131757780} + - {fileID: 4181030785455488} + - {fileID: 4306544925298146} + - {fileID: 4860895689742166} + - {fileID: 4432749068542684} + - {fileID: 4075566800663240} + - {fileID: 4928934790995212} + - {fileID: 4298066619836676} + - {fileID: 4741963489460462} + - {fileID: 4301028178895886} + - {fileID: 4108724387687140} + - {fileID: 4334758250849932} + - {fileID: 4917392242776758} + - {fileID: 4941669013278794} + - {fileID: 4143224262009474} + - {fileID: 4018078701669832} + - {fileID: 4049452316068636} + - {fileID: 4748391031702748} + - {fileID: 4514397939338246} + - {fileID: 4361978516921126} + - {fileID: 4948931464359600} + - {fileID: 4225328472586460} + - {fileID: 4459599931419054} + - {fileID: 4169132998361604} + - {fileID: 4539816768824420} + - {fileID: 4241094239306508} + - {fileID: 4007654423138198} + - {fileID: 4991231530613518} + - {fileID: 4146166128820228} + - {fileID: 4597284278799572} + - {fileID: 4914943240201416} + - {fileID: 4670420799516482} + - {fileID: 4136798552964460} + - {fileID: 4212261233308806} + - {fileID: 4892578489063060} + - {fileID: 4119286177475372} + - {fileID: 4471665224973970} + - {fileID: 4594775044774486} + - {fileID: 4132173377954600} + - {fileID: 4268807291916800} + - {fileID: 4198636148412806} + - {fileID: 4683287682251894} + - {fileID: 4382734894443346} + - {fileID: 4052819782918204} + - {fileID: 4558383211953496} + - {fileID: 4715852658799120} + - {fileID: 4283143979009394} + - {fileID: 4077061754157946} + - {fileID: 4212320446741038} + - {fileID: 4768597039440366} + - {fileID: 4677287491005038} + - {fileID: 4592198057749092} + - {fileID: 4905368652293968} + - {fileID: 4197182265065022} + - {fileID: 4550370854140754} + - {fileID: 4218673413120388} + - {fileID: 4222922947366276} + - {fileID: 4399450937874530} + - {fileID: 4594310559806118} + - {fileID: 4231299221006758} + - {fileID: 4286742660426598} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 4129924974715750} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.06054941} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.6938623} + m_DirtyAABB: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab.meta new file mode 100644 index 0000000..2c127f3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5044755b433cf354eb6f4e2f9f2173b9 +timeCreated: 1540944203 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX new file mode 100644 index 0000000..2d804a1 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX.meta new file mode 100644 index 0000000..7d68fcf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc2.FBX.meta @@ -0,0 +1,309 @@ +fileFormatVersion: 2 +guid: c91085c40a67a7542b3b1a737e2a9c51 +ModelImporter: + serializedVersion: 18 + fileIDToRecycleName: + 100000: //RootNode + 100002: BipU1NPC0040 + 100004: BipU1NPC0040 Footsteps + 100006: BipU1NPC0040 Head + 100008: BipU1NPC0040 HeadNub + 100010: BipU1NPC0040 L Calf + 100012: BipU1NPC0040 L Clavicle + 100014: BipU1NPC0040 L Finger0 + 100016: BipU1NPC0040 L Finger01 + 100018: BipU1NPC0040 L Finger02 + 100020: BipU1NPC0040 L Finger0Nub + 100022: BipU1NPC0040 L Finger1 + 100024: BipU1NPC0040 L Finger11 + 100026: BipU1NPC0040 L Finger12 + 100028: BipU1NPC0040 L Finger1Nub + 100030: BipU1NPC0040 L Finger2 + 100032: BipU1NPC0040 L Finger21 + 100034: BipU1NPC0040 L Finger22 + 100036: BipU1NPC0040 L Finger2Nub + 100038: BipU1NPC0040 L Finger3 + 100040: BipU1NPC0040 L Finger31 + 100042: BipU1NPC0040 L Finger32 + 100044: BipU1NPC0040 L Finger3Nub + 100046: BipU1NPC0040 L Finger4 + 100048: BipU1NPC0040 L Finger41 + 100050: BipU1NPC0040 L Finger42 + 100052: BipU1NPC0040 L Finger4Nub + 100054: BipU1NPC0040 L Foot + 100056: BipU1NPC0040 L Forearm + 100058: BipU1NPC0040 L Hand + 100060: BipU1NPC0040 L Thigh + 100062: BipU1NPC0040 L Toe0 + 100064: BipU1NPC0040 L Toe0Nub + 100066: BipU1NPC0040 L UpperArm + 100068: BipU1NPC0040 Neck + 100070: BipU1NPC0040 Pelvis + 100072: BipU1NPC0040 Prop1 + 100074: BipU1NPC0040 R Calf + 100076: BipU1NPC0040 R Clavicle + 100078: BipU1NPC0040 R Finger0 + 100080: BipU1NPC0040 R Finger01 + 100082: BipU1NPC0040 R Finger02 + 100084: BipU1NPC0040 R Finger0Nub + 100086: BipU1NPC0040 R Finger1 + 100088: BipU1NPC0040 R Finger11 + 100090: BipU1NPC0040 R Finger12 + 100092: BipU1NPC0040 R Finger1Nub + 100094: BipU1NPC0040 R Finger2 + 100096: BipU1NPC0040 R Finger21 + 100098: BipU1NPC0040 R Finger22 + 100100: BipU1NPC0040 R Finger2Nub + 100102: BipU1NPC0040 R Finger3 + 100104: BipU1NPC0040 R Finger31 + 100106: BipU1NPC0040 R Finger32 + 100108: BipU1NPC0040 R Finger3Nub + 100110: BipU1NPC0040 R Finger4 + 100112: BipU1NPC0040 R Finger41 + 100114: BipU1NPC0040 R Finger42 + 100116: BipU1NPC0040 R Finger4Nub + 100118: BipU1NPC0040 R Foot + 100120: BipU1NPC0040 R Forearm + 100122: BipU1NPC0040 R Hand + 100124: BipU1NPC0040 R Thigh + 100126: BipU1NPC0040 R Toe0 + 100128: BipU1NPC0040 R Toe0Nub + 100130: BipU1NPC0040 R UpperArm + 100132: BipU1NPC0040 Spine + 100134: BipU1NPC0040 Spine1 + 100136: BoneU1NPC0040_00 + 100138: BoneU1NPC0040_01 + 100140: BoneU1NPC0040_02 + 100142: BoneU1NPC0040_03 + 100144: BoneU1NPC0040_04 + 100146: BoneU1NPC0040_05 + 100148: BoneU1NPC0040_06 + 100150: BoneU1NPC0040_07 + 100152: BoneU1NPC0040_08 + 100154: BoneU1NPC0040_09 + 100156: BoneU1NPC0040_10 + 100158: BoneU1NPC0040_11 + 100160: BoneU1NPC0040_12 + 100162: BoneU1NPC0040_13 + 100164: BoneU1NPC0040_14 + 100166: BoneU1NPC0040_15 + 100168: BoneU1NPC0040_16 + 100170: BoneU1NPC0040_17 + 100172: BoneU1NPC0040_18 + 100174: BoneU1NPC0040_19 + 100176: Particle View 01 1 + 100178: Particle View 01 + 100180: U1NPC0040 + 400000: //RootNode + 400002: BipU1NPC0040 + 400004: BipU1NPC0040 Footsteps + 400006: BipU1NPC0040 Head + 400008: BipU1NPC0040 HeadNub + 400010: BipU1NPC0040 L Calf + 400012: BipU1NPC0040 L Clavicle + 400014: BipU1NPC0040 L Finger0 + 400016: BipU1NPC0040 L Finger01 + 400018: BipU1NPC0040 L Finger02 + 400020: BipU1NPC0040 L Finger0Nub + 400022: BipU1NPC0040 L Finger1 + 400024: BipU1NPC0040 L Finger11 + 400026: BipU1NPC0040 L Finger12 + 400028: BipU1NPC0040 L Finger1Nub + 400030: BipU1NPC0040 L Finger2 + 400032: BipU1NPC0040 L Finger21 + 400034: BipU1NPC0040 L Finger22 + 400036: BipU1NPC0040 L Finger2Nub + 400038: BipU1NPC0040 L Finger3 + 400040: BipU1NPC0040 L Finger31 + 400042: BipU1NPC0040 L Finger32 + 400044: BipU1NPC0040 L Finger3Nub + 400046: BipU1NPC0040 L Finger4 + 400048: BipU1NPC0040 L Finger41 + 400050: BipU1NPC0040 L Finger42 + 400052: BipU1NPC0040 L Finger4Nub + 400054: BipU1NPC0040 L Foot + 400056: BipU1NPC0040 L Forearm + 400058: BipU1NPC0040 L Hand + 400060: BipU1NPC0040 L Thigh + 400062: BipU1NPC0040 L Toe0 + 400064: BipU1NPC0040 L Toe0Nub + 400066: BipU1NPC0040 L UpperArm + 400068: BipU1NPC0040 Neck + 400070: BipU1NPC0040 Pelvis + 400072: BipU1NPC0040 Prop1 + 400074: BipU1NPC0040 R Calf + 400076: BipU1NPC0040 R Clavicle + 400078: BipU1NPC0040 R Finger0 + 400080: BipU1NPC0040 R Finger01 + 400082: BipU1NPC0040 R Finger02 + 400084: BipU1NPC0040 R Finger0Nub + 400086: BipU1NPC0040 R Finger1 + 400088: BipU1NPC0040 R Finger11 + 400090: BipU1NPC0040 R Finger12 + 400092: BipU1NPC0040 R Finger1Nub + 400094: BipU1NPC0040 R Finger2 + 400096: BipU1NPC0040 R Finger21 + 400098: BipU1NPC0040 R Finger22 + 400100: BipU1NPC0040 R Finger2Nub + 400102: BipU1NPC0040 R Finger3 + 400104: BipU1NPC0040 R Finger31 + 400106: BipU1NPC0040 R Finger32 + 400108: BipU1NPC0040 R Finger3Nub + 400110: BipU1NPC0040 R Finger4 + 400112: BipU1NPC0040 R Finger41 + 400114: BipU1NPC0040 R Finger42 + 400116: BipU1NPC0040 R Finger4Nub + 400118: BipU1NPC0040 R Foot + 400120: BipU1NPC0040 R Forearm + 400122: BipU1NPC0040 R Hand + 400124: BipU1NPC0040 R Thigh + 400126: BipU1NPC0040 R Toe0 + 400128: BipU1NPC0040 R Toe0Nub + 400130: BipU1NPC0040 R UpperArm + 400132: BipU1NPC0040 Spine + 400134: BipU1NPC0040 Spine1 + 400136: BoneU1NPC0040_00 + 400138: BoneU1NPC0040_01 + 400140: BoneU1NPC0040_02 + 400142: BoneU1NPC0040_03 + 400144: BoneU1NPC0040_04 + 400146: BoneU1NPC0040_05 + 400148: BoneU1NPC0040_06 + 400150: BoneU1NPC0040_07 + 400152: BoneU1NPC0040_08 + 400154: BoneU1NPC0040_09 + 400156: BoneU1NPC0040_10 + 400158: BoneU1NPC0040_11 + 400160: BoneU1NPC0040_12 + 400162: BoneU1NPC0040_13 + 400164: BoneU1NPC0040_14 + 400166: BoneU1NPC0040_15 + 400168: BoneU1NPC0040_16 + 400170: BoneU1NPC0040_17 + 400172: BoneU1NPC0040_18 + 400174: BoneU1NPC0040_19 + 400176: Particle View 01 1 + 400178: Particle View 01 + 400180: U1NPC0040 + 4300000: U1NPC0040 + 7400000: base@idle_z1 + 7400002: base@idle_z2 + 11100000: //RootNode + 13700000: //RootNode + 13700002: U1NPC0040 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 2 + animationRotationError: .5 + animationPositionError: .5 + animationScaleError: .5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: + - serializedVersion: 16 + name: base@idle_z1 + takeName: + firstFrame: 1 + lastFrame: 61 + wrapMode: 2 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + - serializedVersion: 16 + name: base@idle_z2 + takeName: + firstFrame: 71 + lastFrame: 135 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 0 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 0 + maskSource: {instanceID: 0} + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + splitTangentsAcrossUV: 1 + normalImportMode: 0 + tangentImportMode: 1 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: .5 + foreArmTwist: .5 + upperLegTwist: .5 + legTwist: .5 + armStretch: .0500000007 + legStretch: .0500000007 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 1 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab new file mode 100644 index 0000000..cef122a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab @@ -0,0 +1,2795 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1150075176140312} + m_IsPrefabParent: 1 +--- !u!1 &1010404982028000 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4286742660426598} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1059218261172526 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4672451955769334} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1059379632462168 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4206757148000588} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1067117516360930 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4227937933469064} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1071057782414660 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4830860581344014} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1072597780765718 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4539816768824420} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1078478601437546 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4708610203189916} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1135460126913090 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4361978516921126} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1140253994452182 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4241094239306508} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1146300402992766 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4884672185996232} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1150075176140312 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4490259505578878} + - component: {fileID: 111666040288003186} + m_Layer: 0 + m_Name: npc3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1175560894121072 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4594310559806118} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1211018038989970 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4883958064838778} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1223994741929324 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4018078701669832} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1228119985909526 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4926157802774422} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1230450992769040 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4049452316068636} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1242315613069768 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4914943240201416} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1249896763784558 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4651692131757780} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1276819018595210 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4519628157740566} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1279178513536234 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4471665224973970} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1302887464771196 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4507225610043402} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1327037363249190 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4905368652293968} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1346049463988820 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4132173377954600} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1358265541489608 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4242575875878994} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1378262311794920 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4735972335878104} + - component: {fileID: 137001305767814332} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1383426941052994 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4941669013278794} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1394043320779632 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4768597039440366} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1435367911033436 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4222922947366276} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1450240092370900 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4077061754157946} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1457829413905422 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4774774915941070} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1461224286221150 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4558383211953496} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1463783122563160 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4514397939338246} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1466185034251980 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4369439259323886} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1469159043005404 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4402573559092728} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1480066599042308 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4237538198175074} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1491368564064446 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4748391031702748} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1495084127033132 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4298066619836676} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1499121026593800 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4670420799516482} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1511084918428596 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4597284278799572} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1534622683209196 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4129924974715750} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1534815798563810 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4334758250849932} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1555432860051452 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4212261233308806} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1570490740816210 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4119286177475372} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1585427440741598 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4772739930438904} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1586687326074116 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4592198057749092} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1593232354702004 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4108724387687140} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1607737375089906 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4218673413120388} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1611608646356222 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4024492227062350} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1615549402128192 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4715852658799120} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1615973451911864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4741963489460462} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1633748573770202 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4245588526158778} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1634366814065108 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4355950095109032} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1656036028183870 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4892578489063060} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1668925066032506 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4197182265065022} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1672010311922786 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4991231530613518} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1672554701315912 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4075566800663240} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1687387406118398 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4732551661033212} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1689864009635666 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4781295074042782} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1693919613554156 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4459599931419054} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1694470935162810 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4993297944847610} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1704716674304470 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4160062110373730} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1705054790548186 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4198636148412806} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1707689860730350 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4136798552964460} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1713922177020308 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4789066211853810} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1722249510381470 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4146166128820228} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1735913267372192 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4007654423138198} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1737719886252514 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4225328472586460} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1756067799405304 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4948931464359600} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1765931078757778 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4052819782918204} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1769112418882430 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4280321952613922} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1775557559707370 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4283143979009394} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1781741348880706 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4683287682251894} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1790239854485172 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4169132998361604} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1797313834521158 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4382734894443346} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1802124568840748 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4432749068542684} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1818762075854664 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4399450937874530} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1848536345837664 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4301028178895886} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1853625800880806 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4143224262009474} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1865634291331264 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4540201712874252} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1873158203567434 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4928934790995212} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1884133590710864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4860895689742166} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1884835152854118 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4306544925298146} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1888737124121322 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4181030785455488} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1890491245204348 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4447875865037570} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1903085340696336 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4594775044774486} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1903843755203422 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4677287491005038} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1917347220285920 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4231299221006758} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1934739608877382 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4212320446741038} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1935096534905822 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4917392242776758} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1951799514151002 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4550370854140754} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1980847113902110 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 4268807291916800} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4007654423138198 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1735913267372192} + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4245588526158778} + m_Father: {fileID: 4748391031702748} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4018078701669832 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1223994741929324} + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_Children: + - {fileID: 4748391031702748} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4024492227062350 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1611608646356222} + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4169132998361604} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4049452316068636 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1230450992769040} + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 4241094239306508} + m_Father: {fileID: 4143224262009474} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4052819782918204 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1765931078757778} + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 4077061754157946} + m_Father: {fileID: 4382734894443346} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4075566800663240 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1672554701315912} + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4218673413120388} + m_Father: {fileID: 4181030785455488} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4077061754157946 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1450240092370900} + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4242575875878994} + m_Father: {fileID: 4052819782918204} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4108724387687140 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1593232354702004} + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4670420799516482} + m_Father: {fileID: 4741963489460462} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4119286177475372 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1570490740816210} + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_Children: + - {fileID: 4471665224973970} + - {fileID: 4715852658799120} + - {fileID: 4382734894443346} + - {fileID: 4132173377954600} + - {fileID: 4268807291916800} + m_Father: {fileID: 4892578489063060} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4129924974715750 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1534622683209196} + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4732551661033212} + - {fileID: 4708610203189916} + - {fileID: 4651692131757780} + - {fileID: 4181030785455488} + - {fileID: 4860895689742166} + m_Father: {fileID: 4774774915941070} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4132173377954600 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1346049463988820} + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 4198636148412806} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4136798552964460 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1707689860730350} + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4212261233308806} + m_Father: {fileID: 4432749068542684} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4143224262009474 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853625800880806} + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4049452316068636} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4146166128820228 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1722249510381470} + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_Children: + - {fileID: 4206757148000588} + m_Father: {fileID: 4597284278799572} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4160062110373730 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1704716674304470} + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_Children: + - {fileID: 4914943240201416} + m_Father: {fileID: 4732551661033212} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4169132998361604 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1790239854485172} + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 4024492227062350} + m_Father: {fileID: 4225328472586460} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4181030785455488 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1888737124121322} + m_LocalRotation: {x: 0.14481032, y: 0.7232496, z: 0.67084324, w: -0.0768724} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4075566800663240} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4197182265065022 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1668925066032506} + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_Children: + - {fileID: 4592198057749092} + m_Father: {fileID: 4772739930438904} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4198636148412806 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1705054790548186} + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4768597039440366} + m_Father: {fileID: 4132173377954600} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4206757148000588 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1059379632462168} + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_Children: [] + m_Father: {fileID: 4146166128820228} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4212261233308806 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1555432860051452} + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_Children: [] + m_Father: {fileID: 4136798552964460} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4212320446741038 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1934739608877382} + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4519628157740566} + m_Father: {fileID: 4283143979009394} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4218673413120388 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1607737375089906} + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_Children: + - {fileID: 4222922947366276} + m_Father: {fileID: 4075566800663240} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4222922947366276 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1435367911033436} + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: [] + m_Father: {fileID: 4218673413120388} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4225328472586460 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1737719886252514} + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_Children: + - {fileID: 4169132998361604} + m_Father: {fileID: 4948931464359600} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4227937933469064 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1067117516360930} + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4298066619836676} + m_Father: {fileID: 4789066211853810} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4231299221006758 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1917347220285920} + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4286742660426598} + m_Father: {fileID: 4594310559806118} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4237538198175074 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1480066599042308} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4490259505578878} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4241094239306508 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1140253994452182} + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4884672185996232} + m_Father: {fileID: 4049452316068636} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4242575875878994 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1358265541489608} + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_Children: [] + m_Father: {fileID: 4077061754157946} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4245588526158778 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1633748573770202} + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 4007654423138198} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4268807291916800 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1980847113902110} + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4683287682251894} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4280321952613922 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1769112418882430} + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_Children: [] + m_Father: {fileID: 4677287491005038} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4283143979009394 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1775557559707370} + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 4212320446741038} + m_Father: {fileID: 4715852658799120} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4286742660426598 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1010404982028000} + m_LocalRotation: {x: -0.00030686986, y: -0.014894295, z: -0.012759085, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_Children: [] + m_Father: {fileID: 4231299221006758} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4298066619836676 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1495084127033132} + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_Children: + - {fileID: 4334758250849932} + m_Father: {fileID: 4227937933469064} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4301028178895886 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1848536345837664} + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_Children: + - {fileID: 4991231530613518} + m_Father: {fileID: 4306544925298146} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4306544925298146 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1884835152854118} + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_Children: + - {fileID: 4301028178895886} + m_Father: {fileID: 4860895689742166} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4334758250849932 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1534815798563810} + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4917392242776758} + - {fileID: 4948931464359600} + - {fileID: 4514397939338246} + - {fileID: 4143224262009474} + - {fileID: 4018078701669832} + m_Father: {fileID: 4298066619836676} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4355950095109032 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1634366814065108} + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: + - {fileID: 4672451955769334} + m_Father: {fileID: 4928934790995212} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4361978516921126 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1135460126913090} + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4539816768824420} + m_Father: {fileID: 4514397939338246} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4369439259323886 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1466185034251980} + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_Children: + - {fileID: 4892578489063060} + m_Father: {fileID: 4830860581344014} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4382734894443346 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1797313834521158} + m_LocalRotation: {x: 0.07039445, y: 0.011170968, z: -0.3130863, w: 0.9470464} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_Children: + - {fileID: 4052819782918204} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4399450937874530 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1818762075854664} + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_Children: + - {fileID: 4594310559806118} + m_Father: {fileID: 4550370854140754} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4402573559092728 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1469159043005404} + m_LocalRotation: {x: -0.027678797, y: 0.014816013, z: 0.03905903, w: 0.99874365} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4928934790995212} + m_Father: {fileID: 4732551661033212} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4432749068542684 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1802124568840748} + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4136798552964460} + m_Father: {fileID: 4651692131757780} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4447875865037570 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1890491245204348} + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: [] + m_Father: {fileID: 4539816768824420} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4459599931419054 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1693919613554156} + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_Children: + - {fileID: 4507225610043402} + m_Father: {fileID: 4941669013278794} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4471665224973970 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1279178513536234} + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4594775044774486} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4490259505578878 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1150075176140312} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 11.278667, y: -1.7827877, z: 6.118402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4774774915941070} + - {fileID: 4237538198175074} + - {fileID: 4540201712874252} + - {fileID: 4735972335878104} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4507225610043402 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1302887464771196} + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 4459599931419054} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4514397939338246 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1463783122563160} + m_LocalRotation: {x: -0.07039445, y: -0.011170963, z: -0.3130863, w: 0.9470464} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4361978516921126} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4519628157740566 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1276819018595210} + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_Children: [] + m_Father: {fileID: 4212320446741038} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4539816768824420 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1072597780765718} + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4447875865037570} + m_Father: {fileID: 4361978516921126} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4540201712874252 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1865634291331264} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4490259505578878} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4550370854140754 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1951799514151002} + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_Children: + - {fileID: 4399450937874530} + m_Father: {fileID: 4774774915941070} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4558383211953496 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1461224286221150} + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4781295074042782} + m_Father: {fileID: 4594775044774486} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4592198057749092 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1586687326074116} + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4905368652293968} + m_Father: {fileID: 4197182265065022} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4594310559806118 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1175560894121072} + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4231299221006758} + m_Father: {fileID: 4399450937874530} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4594775044774486 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903085340696336} + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_Children: + - {fileID: 4558383211953496} + m_Father: {fileID: 4471665224973970} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4597284278799572 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1511084918428596} + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_Children: + - {fileID: 4146166128820228} + m_Father: {fileID: 4914943240201416} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4651692131757780 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1249896763784558} + m_LocalRotation: {x: -0.034353625, y: 0.6956146, z: 0.70682585, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_Children: + - {fileID: 4432749068542684} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4670420799516482 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1499121026593800} + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_Children: [] + m_Father: {fileID: 4108724387687140} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4672451955769334 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1059218261172526} + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_Children: [] + m_Father: {fileID: 4355950095109032} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4677287491005038 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1903843755203422} + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_Children: + - {fileID: 4280321952613922} + m_Father: {fileID: 4683287682251894} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4683287682251894 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1781741348880706} + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_Children: + - {fileID: 4677287491005038} + m_Father: {fileID: 4268807291916800} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4708610203189916 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1078478601437546} + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4741963489460462} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4715852658799120 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1615549402128192} + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_Children: + - {fileID: 4283143979009394} + m_Father: {fileID: 4119286177475372} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4732551661033212 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1687387406118398} + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4160062110373730} + - {fileID: 4772739930438904} + - {fileID: 4402573559092728} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4735972335878104 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378262311794920} + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4490259505578878} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4741963489460462 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1615973451911864} + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_Children: + - {fileID: 4108724387687140} + m_Father: {fileID: 4708610203189916} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4748391031702748 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1491368564064446} + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4007654423138198} + m_Father: {fileID: 4018078701669832} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4768597039440366 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1394043320779632} + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_Children: + - {fileID: 4883958064838778} + m_Father: {fileID: 4198636148412806} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4772739930438904 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1585427440741598} + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_Children: + - {fileID: 4197182265065022} + m_Father: {fileID: 4732551661033212} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4774774915941070 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1457829413905422} + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_Children: + - {fileID: 4993297944847610} + - {fileID: 4129924974715750} + - {fileID: 4550370854140754} + m_Father: {fileID: 4490259505578878} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4781295074042782 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1689864009635666} + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_Children: [] + m_Father: {fileID: 4558383211953496} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4789066211853810 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1713922177020308} + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: + - {fileID: 4227937933469064} + m_Father: {fileID: 4928934790995212} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4830860581344014 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1071057782414660} + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_Children: + - {fileID: 4369439259323886} + m_Father: {fileID: 4928934790995212} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4860895689742166 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1884133590710864} + m_LocalRotation: {x: -0.0070472816, y: 0.7129379, z: -0.7009485, w: 0.018473662} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4306544925298146} + m_Father: {fileID: 4129924974715750} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4883958064838778 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1211018038989970} + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_Children: [] + m_Father: {fileID: 4768597039440366} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4884672185996232 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1146300402992766} + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 4241094239306508} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4892578489063060 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1656036028183870} + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_Children: + - {fileID: 4119286177475372} + m_Father: {fileID: 4369439259323886} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4905368652293968 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1327037363249190} + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4926157802774422} + m_Father: {fileID: 4592198057749092} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4914943240201416 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1242315613069768} + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_Children: + - {fileID: 4597284278799572} + m_Father: {fileID: 4160062110373730} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4917392242776758 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1935096534905822} + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4941669013278794} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4926157802774422 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1228119985909526} + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_Children: [] + m_Father: {fileID: 4905368652293968} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4928934790995212 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1873158203567434} + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4355950095109032} + - {fileID: 4789066211853810} + - {fileID: 4830860581344014} + m_Father: {fileID: 4402573559092728} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4941669013278794 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1383426941052994} + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_Children: + - {fileID: 4459599931419054} + m_Father: {fileID: 4917392242776758} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4948931464359600 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1756067799405304} + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_Children: + - {fileID: 4225328472586460} + m_Father: {fileID: 4334758250849932} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4991231530613518 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1672010311922786} + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_Children: [] + m_Father: {fileID: 4301028178895886} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4993297944847610 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1694470935162810} + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_Children: [] + m_Father: {fileID: 4774774915941070} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!111 &111666040288003186 +Animation: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1150075176140312} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!137 &137001305767814332 +SkinnedMeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1378262311794920} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: fae8465b71b8eca4fbea8d86dbc01e03, 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_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 4402573559092728} + - {fileID: 4732551661033212} + - {fileID: 4830860581344014} + - {fileID: 4355950095109032} + - {fileID: 4789066211853810} + - {fileID: 4772739930438904} + - {fileID: 4129924974715750} + - {fileID: 4160062110373730} + - {fileID: 4369439259323886} + - {fileID: 4227937933469064} + - {fileID: 4708610203189916} + - {fileID: 4651692131757780} + - {fileID: 4181030785455488} + - {fileID: 4306544925298146} + - {fileID: 4860895689742166} + - {fileID: 4432749068542684} + - {fileID: 4075566800663240} + - {fileID: 4928934790995212} + - {fileID: 4298066619836676} + - {fileID: 4741963489460462} + - {fileID: 4301028178895886} + - {fileID: 4108724387687140} + - {fileID: 4334758250849932} + - {fileID: 4917392242776758} + - {fileID: 4941669013278794} + - {fileID: 4143224262009474} + - {fileID: 4018078701669832} + - {fileID: 4049452316068636} + - {fileID: 4748391031702748} + - {fileID: 4514397939338246} + - {fileID: 4361978516921126} + - {fileID: 4948931464359600} + - {fileID: 4225328472586460} + - {fileID: 4459599931419054} + - {fileID: 4169132998361604} + - {fileID: 4539816768824420} + - {fileID: 4241094239306508} + - {fileID: 4007654423138198} + - {fileID: 4991231530613518} + - {fileID: 4146166128820228} + - {fileID: 4597284278799572} + - {fileID: 4914943240201416} + - {fileID: 4670420799516482} + - {fileID: 4136798552964460} + - {fileID: 4212261233308806} + - {fileID: 4892578489063060} + - {fileID: 4119286177475372} + - {fileID: 4471665224973970} + - {fileID: 4594775044774486} + - {fileID: 4132173377954600} + - {fileID: 4268807291916800} + - {fileID: 4198636148412806} + - {fileID: 4683287682251894} + - {fileID: 4382734894443346} + - {fileID: 4052819782918204} + - {fileID: 4558383211953496} + - {fileID: 4715852658799120} + - {fileID: 4283143979009394} + - {fileID: 4077061754157946} + - {fileID: 4212320446741038} + - {fileID: 4768597039440366} + - {fileID: 4677287491005038} + - {fileID: 4592198057749092} + - {fileID: 4905368652293968} + - {fileID: 4197182265065022} + - {fileID: 4550370854140754} + - {fileID: 4218673413120388} + - {fileID: 4222922947366276} + - {fileID: 4399450937874530} + - {fileID: 4594310559806118} + - {fileID: 4231299221006758} + - {fileID: 4286742660426598} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 4129924974715750} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.06054941} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.6938623} + m_DirtyAABB: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab.meta b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab.meta new file mode 100644 index 0000000..fe5f34e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/Role/npc3.prefab.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0cf8cd8b7e5dca44290f132f95d0b01a +timeCreated: 1547976416 +licenseType: Free +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI.meta new file mode 100644 index 0000000..8d9daca --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5d47e13569988ba48b016bb4d47aa8ab +folderAsset: yes +timeCreated: 1446198115 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png new file mode 100644 index 0000000..209a182 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png.meta new file mode 100644 index 0000000..a242076 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 346afb959685d48ed81690b2676beb38 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes new file mode 100644 index 0000000..9adb206 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes.meta new file mode 100644 index 0000000..c10faac --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Bag_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: db148c03ade42504588dd6f2f50ecaee +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png new file mode 100644 index 0000000..f03157f Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png.meta new file mode 100644 index 0000000..e5b8db0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 2639a9e025be642158955609c804baf4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes new file mode 100644 index 0000000..3f8b082 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes.meta new file mode 100644 index 0000000..e2fa113 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a4930dcd8a536f243a39ef553f5d8b0f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav new file mode 100644 index 0000000..37e7ceb Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav.meta new file mode 100644 index 0000000..f731a02 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_gojg7u.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 264b41ad74a12f84b96c1912d1f5b5aa +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav new file mode 100644 index 0000000..32c65f0 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav.meta new file mode 100644 index 0000000..69a260e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Basics_o4lt7w.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 87155986ecd4a494fb1bf8a30894be6c +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png new file mode 100644 index 0000000..45e5101 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png.meta new file mode 100644 index 0000000..62b99f7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: b1507578401e008468ea8e425875ccc4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: fairygui-examples/bundleusage.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes new file mode 100644 index 0000000..5f029da Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes.meta new file mode 100644 index 0000000..92d0d1f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/BundleUsage_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 350c6259b97d7ac42a77dbed286ffca9 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: fairygui-examples/bundleusage.ab + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png new file mode 100644 index 0000000..8169565 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png.meta new file mode 100644 index 0000000..f84ba9c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: c0442108e01274a65b9c9ddb2088b4d3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes new file mode 100644 index 0000000..06199cb Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes.meta new file mode 100644 index 0000000..2e36643 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Cooldown_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 359c0adf0408b364fbd36b6173b72867 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png new file mode 100644 index 0000000..dc04373 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png.meta new file mode 100644 index 0000000..4907483 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: a67c842fc46754e2c84ffafa9aea4298 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes new file mode 100644 index 0000000..20113d5 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes.meta new file mode 100644 index 0000000..2ecb594 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Curve_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 310ed4c653b32e44d8ecb7a7dfd523d5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png new file mode 100644 index 0000000..dd61a5b Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png.meta new file mode 100644 index 0000000..3892a6a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 37e1dfaa1f62d477eb49d74ede6109a7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes new file mode 100644 index 0000000..a746d84 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes.meta new file mode 100644 index 0000000..29d8e39 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/CutScene_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 90e82b98c94b0bd4dbd3b56fffacf0c7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png new file mode 100644 index 0000000..6764697 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png.meta new file mode 100644 index 0000000..3ca4972 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: e2ec10b04b3e94470bf6123d315ff9c0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes new file mode 100644 index 0000000..5d93647 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes.meta new file mode 100644 index 0000000..584cfa6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/EmitNumbers_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 61e3084654685784f84d844e0fc30e4f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png new file mode 100644 index 0000000..3d841f0 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png.meta new file mode 100644 index 0000000..0048d48 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: b4f98defb276c48289959754e00cee34 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes new file mode 100644 index 0000000..9cbf699 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes.meta new file mode 100644 index 0000000..cdb1163 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Emoji_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 703b8b3953da64146a7b4907bdd0c264 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png new file mode 100644 index 0000000..08c1c31 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png.meta new file mode 100644 index 0000000..3d90146 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 1d1b2b4b5ff4040f7aa0b81484ba93e1 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes new file mode 100644 index 0000000..6293fa6 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes.meta new file mode 100644 index 0000000..137cc71 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Extension_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8aa31d075dbbae445abcd6049d3bba22 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png new file mode 100644 index 0000000..c397db1 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png.meta new file mode 100644 index 0000000..973e3a6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 7cdbc3249c2af40c3ab31ef863ea7f08 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes new file mode 100644 index 0000000..190e7ab Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes.meta new file mode 100644 index 0000000..8a9b39f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Filter_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3e95d77aad938b245b60a4698a2f7be8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes new file mode 100644 index 0000000..1b25bec Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes.meta new file mode 100644 index 0000000..0fadf18 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Gesture_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0d3d4fc09ae51914691b7f1cba3be651 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png new file mode 100644 index 0000000..a895af3 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png.meta new file mode 100644 index 0000000..576aac8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: dbc97846cafbb41cebb8168d9bad61fa +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes new file mode 100644 index 0000000..5e0505f Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes.meta new file mode 100644 index 0000000..6ea07ed --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Guide_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4ee7f37d1f11c2c459ff36db6169332c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png new file mode 100644 index 0000000..c022d87 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png.meta new file mode 100644 index 0000000..7ff26ef --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 60708b9439d254e198b0933795041029 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes new file mode 100644 index 0000000..e7ca0db Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes.meta new file mode 100644 index 0000000..df80fd7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HeadBar_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2b98557f90d48814a81ed521a3d4ca25 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png new file mode 100644 index 0000000..428a4b0 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png.meta new file mode 100644 index 0000000..f8668d7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 9634eddcff8554d65b031e5962025725 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes new file mode 100644 index 0000000..cb7eff8 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes.meta new file mode 100644 index 0000000..c15d870 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/HitTest_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 308c9f6ac8147a44ba6859a334e8d1c4 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png new file mode 100644 index 0000000..ba5a905 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png.meta new file mode 100644 index 0000000..a120ad9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 51af1ab91147945a092500a6ec852f54 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes new file mode 100644 index 0000000..9b6592a Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes.meta new file mode 100644 index 0000000..265cbb5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Joystick_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0fe158521236c3846936aed736848add +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png new file mode 100644 index 0000000..dc04373 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png.meta new file mode 100644 index 0000000..2c494cf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 63e25316a3f544e0fad0be2802337063 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes new file mode 100644 index 0000000..56bbd50 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes.meta new file mode 100644 index 0000000..2eae331 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/LoopList_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: da00dbf49111cd64ea7c7ceb7a7e4618 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png new file mode 100644 index 0000000..baea7db Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png.meta new file mode 100644 index 0000000..be8f220 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: ba8a3726c6403402cbd50dfd4615dbc2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes new file mode 100644 index 0000000..72d6de0 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes.meta new file mode 100644 index 0000000..b16a92e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ModalWaiting_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 790c7d9c4d024c7438d1ff01a5c07f1f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png new file mode 100644 index 0000000..9dc1ef7 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png.meta new file mode 100644 index 0000000..101aa47 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 34b6171899a7648e6baa0e82b2cb27ad +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes new file mode 100644 index 0000000..7d4823f Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes.meta new file mode 100644 index 0000000..d17224c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Model_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2abb3b1a68ebc7a4cb6b273de5619bf8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png new file mode 100644 index 0000000..911bc78 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png.meta new file mode 100644 index 0000000..9311bb0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 9979fe01cca0048359536d32143f602b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes new file mode 100644 index 0000000..3c3cbaf Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes.meta new file mode 100644 index 0000000..16d9018 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Particles_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: be05ee8cec8ae704e8e6161295a4e21d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png new file mode 100644 index 0000000..f4b5249 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png.meta new file mode 100644 index 0000000..1326a65 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 9c51a92924cee4a9e814c7891e48cb01 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes new file mode 100644 index 0000000..0714948 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes.meta new file mode 100644 index 0000000..eeab0f9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Perspective_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b0a30153bc9a1bd4197ea6499ae08bc3 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png new file mode 100644 index 0000000..981bb25 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png.meta new file mode 100644 index 0000000..0e5d10f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 8392c7363d118450d9193a7c73d574cc +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes new file mode 100644 index 0000000..18ff0c9 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes.meta new file mode 100644 index 0000000..2b5d31f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/PullToRefresh_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5cc4d91cab8814f48981f065ffb91b2a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png new file mode 100644 index 0000000..e480a08 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png.meta new file mode 100644 index 0000000..5ba18a7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 443e1341bc243417b97740f655b23ef0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes new file mode 100644 index 0000000..3c19943 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes.meta new file mode 100644 index 0000000..49b2f03 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/RenderTexture_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 25e072f50178dd743bf51e98e7906433 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png new file mode 100644 index 0000000..3baa595 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png.meta new file mode 100644 index 0000000..81f5e22 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: e8fb179a0cfbe4efba6c1b82937e1ad8 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes new file mode 100644 index 0000000..15ca206 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes.meta new file mode 100644 index 0000000..01b5cce --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/ScrollPane_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 13e5fff898acc2e42a042dc4ae10682d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png new file mode 100644 index 0000000..d284c56 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png.meta new file mode 100644 index 0000000..9c21f04 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_atlas0.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: c8e5281cf8130430f953aeab61b5cf87 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + 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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes new file mode 100644 index 0000000..dd5314a Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes.meta new file mode 100644 index 0000000..ca50ca6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TextMeshPro_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fc65f94cd947b46b6ad39d40179bd24b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png new file mode 100644 index 0000000..851f000 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png.meta new file mode 100644 index 0000000..57e5c89 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 85940b8173dea45339e76145592a51bd +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes new file mode 100644 index 0000000..bea2335 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes.meta new file mode 100644 index 0000000..1c5d60f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c73a297bc5f785f4a83bc85211a85b10 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav new file mode 100644 index 0000000..edaae03 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav.meta new file mode 100644 index 0000000..381ffe8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/Transition_gkq03.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: aee486249a6a6964abaee5e35552eb4e +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png new file mode 100644 index 0000000..0a13b26 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png.meta new file mode 100644 index 0000000..b8877c8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 074e3db5779c24509a2d68806deed31f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes new file mode 100644 index 0000000..5bf5fed Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes.meta new file mode 100644 index 0000000..3a09a66 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TreeView_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a742d5b70dc43c647805d3ccf3b4b2e3 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png new file mode 100644 index 0000000..c0f64d7 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png.meta new file mode 100644 index 0000000..115f0b5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 9600823ed9f92449a81baf81a4d993a7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes new file mode 100644 index 0000000..9c09452 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes.meta new file mode 100644 index 0000000..f62fc1e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnCard_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 68c3403d1c5501742a08b2453bbd559e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png new file mode 100644 index 0000000..6d11961 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png.meta new file mode 100644 index 0000000..9d78b76 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 60423f33540eb4cc5b0c05a541b4a586 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes new file mode 100644 index 0000000..ade5a47 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes.meta new file mode 100644 index 0000000..755235c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TurnPage_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 97d860cf3af710341bb25de35fcff91f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png new file mode 100644 index 0000000..45aaedc Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png.meta new file mode 100644 index 0000000..af606b2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 0f7c4ebe5147d466cab6f702f9ca1c4c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes new file mode 100644 index 0000000..1e5f354 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes.meta new file mode 100644 index 0000000..1165cdc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/TypingEffect_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e82e588b274dee84682a15114b8b5d6f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png new file mode 100644 index 0000000..08c1c31 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png.meta new file mode 100644 index 0000000..09aa353 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_atlas0.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: e7f919ab9ee4d42dd971f965ec9aec59 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + 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: -3 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes new file mode 100644 index 0000000..e1317a8 Binary files /dev/null and b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes differ diff --git a/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes.meta b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes.meta new file mode 100644 index 0000000..03f8693 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Resources/UI/VirtualList_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ed1d9f6e251c95343859bc0e6fdc634f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes.meta b/Assets/Plugins/FairyGUI/Examples/Scenes.meta new file mode 100644 index 0000000..90615ce --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ca17b6c8192bd5d4aadec6a31065c8cb +folderAsset: yes +timeCreated: 1446194671 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity new file mode 100644 index 0000000..171f5ac --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity @@ -0,0 +1,408 @@ +%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.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, a: 1} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 9 + m_Resolution: 1 + m_BakeResolution: 50 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +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.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1022230605 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1022230610} + - component: {fileID: 1022230609} + - component: {fileID: 1022230606} + 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 &1022230606 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1022230605} + m_Enabled: 1 +--- !u!20 &1022230609 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1022230605} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1022230610 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1022230605} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1274964746 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1274964748} + - component: {fileID: 1274964749} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1274964748 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1274964746} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1274964749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1274964746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &1841214650 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1841214652} + - component: {fileID: 1841214651} + - component: {fileID: 1841214653} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1841214651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841214650} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Basics + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Basics + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1841214652 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841214650} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.014084508, y: 0.014084508, z: 0.014084508} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1841214653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1841214650} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a7c649dfadf79df4a963190eded74b30, type: 3} + m_Name: + m_EditorClassIdentifier: + lineGradient: + serializedVersion: 2 + key0: {r: 0.7941176, g: 0.21604672, b: 0.21604672, a: 1} + key1: {r: 0.069582626, g: 0.8602941, b: 0.27135026, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 +--- !u!1 &1927994641 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1927994644} + - component: {fileID: 1927994643} + - component: {fileID: 1927994642} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1927994642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1927994641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1927994643 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1927994641} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1927994644 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1927994641} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8, y: -5, 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} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity.meta new file mode 100644 index 0000000..eeb6f13 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 01 - Basics.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 97fd62303685de449a991eaa58a92cd5 +DefaultImporter: + userData: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity new file mode 100644 index 0000000..b34a459 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity @@ -0,0 +1,379 @@ +%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.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, a: 1} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 9 + m_Resolution: 1 + m_BakeResolution: 10 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +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.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &45526437 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 45526438} + - component: {fileID: 45526440} + - component: {fileID: 45526439} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &45526438 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 45526437} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!81 &45526439 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 45526437} + m_Enabled: 1 +--- !u!20 &45526440 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 45526437} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1193612053 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1193612055} + - component: {fileID: 1193612054} + - component: {fileID: 1193612056} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1193612054 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1193612053} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Bag + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Bag + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1193612055 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1193612053} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1193612056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1193612053} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72adad54c37cc25499988e9b785d5b90, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1918973540 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1918973543} + - component: {fileID: 1918973542} + - component: {fileID: 1918973541} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1918973541 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1918973540} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1918973542 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1918973540} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1918973543 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1918973540} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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 &2134384559 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2134384562} + - component: {fileID: 2134384563} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2134384562 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2134384559} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2134384563 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2134384559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity.meta new file mode 100644 index 0000000..7fe0958 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 02 - Bag.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7bb0881047732e549a389bf881da507b +timeCreated: 1446193142 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity new file mode 100644 index 0000000..d41929a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity @@ -0,0 +1,379 @@ +%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.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, a: 1} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 9 + m_Resolution: 1 + m_BakeResolution: 10 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +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.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &117386828 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 117386830} + - component: {fileID: 117386829} + - component: {fileID: 117386831} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &117386829 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 117386828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Cooldown + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/CoolDown + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &117386830 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 117386828} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &117386831 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 117386828} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c59a131f345dd4e4895409b111e0c434, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &490692173 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 490692175} + - component: {fileID: 490692177} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &490692175 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 490692173} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &490692177 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 490692173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &1398945596 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1398945599} + - component: {fileID: 1398945598} + - component: {fileID: 1398945597} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1398945597 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398945596} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1398945598 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398945596} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1398945599 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398945596} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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 &1457713335 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1457713336} + - component: {fileID: 1457713338} + - component: {fileID: 1457713337} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1457713336 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1457713335} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!81 &1457713337 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1457713335} + m_Enabled: 1 +--- !u!20 &1457713338 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1457713335} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity.meta new file mode 100644 index 0000000..a974eaf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 03 - CoolDown.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 385f5f841a2b93449bc0a7d72f1034e0 +timeCreated: 1446194671 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity new file mode 100644 index 0000000..734e9d3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity @@ -0,0 +1,379 @@ +%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.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, a: 1} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 9 + m_Resolution: 1 + m_BakeResolution: 10 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +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.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &99975389 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 99975391} + - component: {fileID: 99975390} + - component: {fileID: 99975392} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &99975390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 99975389} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Emoji + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Emoji + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &99975391 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 99975389} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &99975392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 99975389} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4953851686ef2ed4d90f67c5fe144849, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &608649424 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 608649427} + - component: {fileID: 608649426} + - component: {fileID: 608649425} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &608649425 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 608649424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &608649426 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 608649424} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &608649427 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 608649424} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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 &661498341 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 661498343} + - component: {fileID: 661498345} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &661498343 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 661498341} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &661498345 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 661498341} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &1897786052 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1897786053} + - component: {fileID: 1897786055} + - component: {fileID: 1897786054} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1897786053 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1897786052} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!81 &1897786054 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1897786052} + m_Enabled: 1 +--- !u!20 &1897786055 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1897786052} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity.meta new file mode 100644 index 0000000..150a776 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 04 - Emoji.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3231025ce71198b4fabbaa7c03b429d8 +timeCreated: 1446194671 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity new file mode 100644 index 0000000..f65d456 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity @@ -0,0 +1,447 @@ +%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.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 10 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: 0aebb3a802b964f409058bff053096c2, + type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &5885049 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5885052} + - component: {fileID: 5885051} + - component: {fileID: 5885050} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &5885050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5885049} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &5885051 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5885049} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &5885052 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5885049} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9.105556, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &392768408 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 392768413} + - component: {fileID: 392768412} + - component: {fileID: 392768409} + 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 &392768409 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392768408} + m_Enabled: 1 +--- !u!20 &392768412 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392768408} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 32.9 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &392768413 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392768408} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 250, y: 1.8, z: 300} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &871184436 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 871184437} + - component: {fileID: 871184440} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &871184437 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 871184436} + serializedVersion: 2 + 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: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &871184440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 871184436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &1423413459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1423413462} + - component: {fileID: 1423413461} + - component: {fileID: 1423413460} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1423413460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1423413459} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 09cf2c20abdf7ea428bd3f1c68941949, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1423413461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1423413459} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Joystick + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Joystick + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1423413462 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1423413459} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 871184437} + - {fileID: 1423413462} + - {fileID: 392768413} + - {fileID: 5885052} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity.meta new file mode 100644 index 0000000..836e21c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 05 - Joystick.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 716b6afb6abbcdd4297021a99ac3795f +timeCreated: 1446193142 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity new file mode 100644 index 0000000..c71bc1e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity @@ -0,0 +1,6728 @@ +%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.44745964, g: 0.4974082, b: 0.5752875, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: 8e3ccb58ee41f47ebbbb7e2333027555, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &8026480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8026481} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8026481 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8026480} + serializedVersion: 2 + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1597156954} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9235254 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9235255} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9235255 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9235254} + serializedVersion: 2 + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 136750823} + m_Father: {fileID: 371607150} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &24949879 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 24949880} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &24949880 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24949879} + serializedVersion: 2 + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 604023225} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &38476557 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 38476558} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &38476558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 38476557} + serializedVersion: 2 + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1854384073} + m_Father: {fileID: 706385179} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &42026052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 42026053} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &42026053 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 42026052} + serializedVersion: 2 + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 165461687} + m_Father: {fileID: 1126811421} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &46044536 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 46044537} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &46044537 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 46044536} + serializedVersion: 2 + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1683487132} + m_Father: {fileID: 1783272050} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &46311997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 46311998} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &46311998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 46311997} + serializedVersion: 2 + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 205846879} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &57203413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 57203414} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &57203414 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 57203413} + serializedVersion: 2 + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1626688692} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &68195041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 68195042} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &68195042 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 68195041} + serializedVersion: 2 + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 991242639} + m_Father: {fileID: 998862636} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &74036653 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 74036654} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &74036654 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 74036653} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 217420212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &95200554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 95200555} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &95200555 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 95200554} + serializedVersion: 2 + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1687218885} + m_Father: {fileID: 580123258} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &97297040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 97297041} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &97297041 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 97297040} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 813419576} + m_Father: {fileID: 457834452} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &114428769 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 114428770} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &114428770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 114428769} + serializedVersion: 2 + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2059659452} + m_Father: {fileID: 2033428167} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &119741639 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 119741640} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &119741640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119741639} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1615731042} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &134573548 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 134573549} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &134573549 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 134573548} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1818267082} + m_Father: {fileID: 1232298640} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &135814318 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 135814319} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &135814319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 135814318} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 829452683} + m_Father: {fileID: 1456111964} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &136750822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 136750823} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &136750823 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 136750822} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1726253866} + m_Father: {fileID: 9235255} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &138086933 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 138086934} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &138086934 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138086933} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1072460526} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &149689137 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 149689138} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &149689138 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 149689137} + serializedVersion: 2 + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1417686770} + m_Father: {fileID: 829452683} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &154354286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 154354287} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &154354287 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154354286} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 205846879} + m_Father: {fileID: 158306131} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &158306130 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 158306131} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &158306131 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 158306130} + serializedVersion: 2 + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 154354287} + m_Father: {fileID: 580123258} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &165461686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 165461687} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &165461687 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165461686} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1845262357} + m_Father: {fileID: 42026053} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &179016198 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 179016199} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &179016199 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 179016198} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1785339272} + m_Father: {fileID: 1273850663} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &188167694 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 188167695} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &188167695 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188167694} + serializedVersion: 2 + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 658372416} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &189811238 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 189811239} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &189811239 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 189811238} + serializedVersion: 2 + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 771109981} + m_Father: {fileID: 404520935} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &196781247 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 196781248} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &196781248 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 196781247} + serializedVersion: 2 + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1473934251} + m_Father: {fileID: 1899068845} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &205846878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 205846879} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &205846879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 205846878} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 46311998} + m_Father: {fileID: 154354287} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &212022623 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 212022624} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &212022624 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 212022623} + serializedVersion: 2 + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 658372416} + m_Father: {fileID: 500637370} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &217420211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 217420212} + - component: {fileID: 217420213} + m_Layer: 0 + m_Name: npc2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &217420212 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 217420211} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} + m_LocalPosition: {x: 252, y: 0, z: 306} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 434386591} + - {fileID: 1435058301} + - {fileID: 987352116} + - {fileID: 74036654} + - {fileID: 445166254} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!111 &217420213 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 217420211} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!1 &240332827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 240332828} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &240332828 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240332827} + serializedVersion: 2 + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 987352116} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &257393200 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 257393201} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &257393201 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 257393200} + serializedVersion: 2 + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 922170558} + m_Father: {fileID: 1765977908} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &274310896 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 274310897} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &274310897 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274310896} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1615731042} + m_Father: {fileID: 801423770} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &298011153 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 298011154} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &298011154 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 298011153} + serializedVersion: 2 + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1305918813} + - {fileID: 1624528395} + - {fileID: 1732835091} + - {fileID: 1055996319} + - {fileID: 1641890755} + m_Father: {fileID: 771109981} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &324152166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 324152167} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &324152167 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 324152166} + serializedVersion: 2 + m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2033428167} + m_Father: {fileID: 1202926684} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &338062899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 338062900} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &338062900 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 338062899} + serializedVersion: 2 + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 395013118} + m_Father: {fileID: 1623921071} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &371607149 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 371607150} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &371607150 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371607149} + serializedVersion: 2 + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 801423770} + - {fileID: 9235255} + - {fileID: 1108666173} + - {fileID: 2130665635} + - {fileID: 760443869} + m_Father: {fileID: 1729301266} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &372805547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 372805548} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &372805548 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 372805547} + serializedVersion: 2 + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1508742174} + m_Father: {fileID: 777325323} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &381286659 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 381286660} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &381286660 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381286659} + serializedVersion: 2 + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2070392242} + m_Father: {fileID: 1732835091} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &386811204 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 386811205} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &386811205 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386811204} + serializedVersion: 2 + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 556768418} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &395013117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 395013118} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &395013118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 395013117} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 437347497} + m_Father: {fileID: 338062900} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &404520934 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 404520935} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &404520935 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404520934} + serializedVersion: 2 + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 189811239} + m_Father: {fileID: 2033428167} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &408109125 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 408109126} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &408109126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 408109125} + serializedVersion: 2 + m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1534725961} + m_Father: {fileID: 1255856681} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &434386590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 434386591} + - component: {fileID: 434386592} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &434386591 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434386590} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 217420212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &434386592 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434386590} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 3 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 324152167} + - {fileID: 1202926684} + - {fileID: 404520935} + - {fileID: 114428770} + - {fileID: 1899068845} + - {fileID: 1273850663} + - {fileID: 1941594535} + - {fileID: 1120665551} + - {fileID: 189811239} + - {fileID: 196781248} + - {fileID: 537665993} + - {fileID: 682091242} + - {fileID: 500637370} + - {fileID: 1308184864} + - {fileID: 675859161} + - {fileID: 1376923168} + - {fileID: 212022624} + - {fileID: 2033428167} + - {fileID: 1473934251} + - {fileID: 1754969252} + - {fileID: 1176946112} + - {fileID: 556768418} + - {fileID: 1456111964} + - {fileID: 683578792} + - {fileID: 880517438} + - {fileID: 1436829388} + - {fileID: 135814319} + - {fileID: 458793805} + - {fileID: 829452683} + - {fileID: 721671422} + - {fileID: 955440361} + - {fileID: 1897887745} + - {fileID: 953908362} + - {fileID: 725918770} + - {fileID: 814978601} + - {fileID: 607641931} + - {fileID: 1987049189} + - {fileID: 149689138} + - {fileID: 2032185436} + - {fileID: 991242639} + - {fileID: 68195042} + - {fileID: 998862636} + - {fileID: 386811205} + - {fileID: 732619709} + - {fileID: 2115796942} + - {fileID: 771109981} + - {fileID: 298011154} + - {fileID: 1305918813} + - {fileID: 457834452} + - {fileID: 1055996319} + - {fileID: 1641890755} + - {fileID: 1484246807} + - {fileID: 1232298640} + - {fileID: 1732835091} + - {fileID: 381286660} + - {fileID: 97297041} + - {fileID: 1624528395} + - {fileID: 2055053893} + - {fileID: 2070392242} + - {fileID: 597592370} + - {fileID: 1717505090} + - {fileID: 134573549} + - {fileID: 1785339272} + - {fileID: 1624225105} + - {fileID: 179016199} + - {fileID: 1623921071} + - {fileID: 658372416} + - {fileID: 188167695} + - {fileID: 338062900} + - {fileID: 395013118} + - {fileID: 437347497} + - {fileID: 1185950259} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 1941594535} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} + m_DirtyAABB: 0 +--- !u!1 &437347496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 437347497} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &437347497 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437347496} + serializedVersion: 2 + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1185950259} + m_Father: {fileID: 395013118} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &442567364 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 442567365} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &442567365 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 442567364} + serializedVersion: 2 + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 814978601} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &443119864 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 443119865} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &443119865 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443119864} + serializedVersion: 2 + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1765977908} + m_Father: {fileID: 1255856681} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &445166253 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 445166254} + - component: {fileID: 445166255} + m_Layer: 0 + m_Name: HeadBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &445166254 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 445166253} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} + m_LocalPosition: {x: 0, y: 2.3, z: 0} + m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 217420212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &445166255 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 445166253} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: HeadBar + componentName: HeadBar + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/HeadBar + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 145, y: 106} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!1 &453408380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 453408381} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &453408381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453408380} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 604023225} + m_Father: {fileID: 760443869} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &457834451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 457834452} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &457834452 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 457834451} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 97297041} + m_Father: {fileID: 1305918813} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &458793804 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 458793805} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &458793805 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458793804} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1987049189} + m_Father: {fileID: 1436829388} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &500637369 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 500637370} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &500637370 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500637369} + serializedVersion: 2 + m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 212022624} + m_Father: {fileID: 1941594535} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &500830115 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 500830116} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &500830116 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500830115} + serializedVersion: 2 + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 730871987} + m_Father: {fileID: 580123258} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &537665992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 537665993} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &537665993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537665992} + serializedVersion: 2 + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1754969252} + m_Father: {fileID: 1941594535} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &548668697 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 548668698} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &548668698 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 548668697} + serializedVersion: 2 + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1719406336} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &556768417 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 556768418} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &556768418 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 556768417} + serializedVersion: 2 + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 386811205} + m_Father: {fileID: 1754969252} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &575458936 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 575458937} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &575458937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 575458936} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 597592370} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &580123257 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 580123258} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &580123258 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 580123257} + serializedVersion: 2 + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 158306131} + - {fileID: 936597944} + - {fileID: 866953093} + - {fileID: 500830116} + - {fileID: 95200555} + m_Father: {fileID: 1683487132} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &597592369 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 597592370} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &597592370 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597592369} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 575458937} + m_Father: {fileID: 2055053893} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &604023224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 604023225} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &604023225 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 604023224} + serializedVersion: 2 + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 24949880} + m_Father: {fileID: 453408381} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &607641930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 607641931} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &607641931 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 607641930} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1851034960} + m_Father: {fileID: 955440361} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &622121875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 622121876} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &622121876 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 622121875} + serializedVersion: 2 + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1726253866} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &658372415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 658372416} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &658372416 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 658372415} + serializedVersion: 2 + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 188167695} + m_Father: {fileID: 212022624} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &668590587 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 668590588} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &668590588 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 668590587} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1597156954} + m_Father: {fileID: 1108666173} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &675859160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 675859161} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &675859161 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675859160} + serializedVersion: 2 + m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1308184864} + m_Father: {fileID: 1941594535} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &682091241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 682091242} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &682091242 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682091241} + serializedVersion: 2 + m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1376923168} + m_Father: {fileID: 1941594535} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &683578791 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 683578792} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &683578792 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 683578791} + serializedVersion: 2 + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 880517438} + m_Father: {fileID: 1456111964} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &686251910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 686251911} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &686251911 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686251910} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1412897040} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &689964215 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 689964216} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &689964216 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 689964215} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1087916989} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &706385178 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 706385179} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &706385179 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 706385178} + serializedVersion: 2 + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 915895223} + - {fileID: 38476558} + - {fileID: 1783272050} + m_Father: {fileID: 769881371} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &721671421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 721671422} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &721671422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721671421} + serializedVersion: 2 + m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 955440361} + m_Father: {fileID: 1456111964} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &725918769 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 725918770} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &725918770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 725918769} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1681448511} + m_Father: {fileID: 880517438} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &730847545 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 730847546} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &730847546 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730847545} + serializedVersion: 2 + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1805010958} + m_Father: {fileID: 1259619146} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &730871986 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 730871987} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &730871987 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730871986} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 846617211} + m_Father: {fileID: 500830116} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &731324603 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 731324604} + - component: {fileID: 731324605} + m_Layer: 0 + m_Name: HeadBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &731324604 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731324603} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} + m_LocalPosition: {x: 0, y: 2.3, z: 0} + m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1412897040} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &731324605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731324603} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: HeadBar + componentName: HeadBar + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/HeadBar + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 145, y: 106} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!1 &732619708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 732619709} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &732619709 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 732619708} + serializedVersion: 2 + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2115796942} + m_Father: {fileID: 1376923168} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &760443868 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 760443869} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &760443869 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 760443868} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 453408381} + m_Father: {fileID: 371607150} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &769881370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 769881371} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &769881371 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769881370} + serializedVersion: 2 + m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 706385179} + m_Father: {fileID: 860044083} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &771109980 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 771109981} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &771109981 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 771109980} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 298011154} + m_Father: {fileID: 189811239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &777325322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 777325323} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &777325323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777325322} + serializedVersion: 2 + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 372805548} + m_Father: {fileID: 1019351139} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &785937531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 785937532} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &785937532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 785937531} + serializedVersion: 2 + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1717505090} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &801423769 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 801423770} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &801423770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801423769} + serializedVersion: 2 + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 274310897} + m_Father: {fileID: 371607150} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &803839621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 803839622} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &803839622 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 803839621} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2019397985} + m_Father: {fileID: 2130665635} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &813419575 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 813419576} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &813419576 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 813419575} + serializedVersion: 2 + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 97297041} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &814978600 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 814978601} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &814978601 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 814978600} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 442567365} + m_Father: {fileID: 953908362} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &829452682 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 829452683} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &829452683 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 829452682} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 149689138} + m_Father: {fileID: 135814319} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &835047215 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 835047216} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &835047216 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835047215} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1641838338} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &845860363 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 845860366} + - component: {fileID: 845860365} + - component: {fileID: 845860364} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &845860364 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845860363} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &845860365 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845860363} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &845860366 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 845860363} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10.449827, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &846617210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 846617211} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &846617211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 846617210} + serializedVersion: 2 + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1068629830} + m_Father: {fileID: 730871987} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &860044082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 860044083} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &860044083 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 860044082} + serializedVersion: 2 + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1151460205} + - {fileID: 1735401710} + - {fileID: 769881371} + m_Father: {fileID: 1255856681} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &866953092 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 866953093} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &866953093 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 866953092} + serializedVersion: 2 + m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1260427640} + m_Father: {fileID: 580123258} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &880517437 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 880517438} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &880517438 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 880517437} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 725918770} + m_Father: {fileID: 683578792} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &915895222 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 915895223} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &915895223 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 915895222} + serializedVersion: 2 + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1445961687} + m_Father: {fileID: 706385179} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &922170557 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 922170558} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &922170558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 922170557} + serializedVersion: 2 + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 257393201} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &935269762 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 935269763} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &935269763 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 935269762} + serializedVersion: 2 + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1019351139} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &936597943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 936597944} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &936597944 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936597943} + serializedVersion: 2 + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1078307844} + m_Father: {fileID: 580123258} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &953908361 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 953908362} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &953908362 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953908361} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 814978601} + m_Father: {fileID: 1897887745} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &955440360 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 955440361} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &955440361 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955440360} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 607641931} + m_Father: {fileID: 721671422} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &987352115 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 987352116} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &987352116 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 987352115} + serializedVersion: 2 + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 240332828} + - {fileID: 1941594535} + - {fileID: 1623921071} + m_Father: {fileID: 217420212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &991242638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 991242639} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &991242639 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 991242638} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1735034889} + m_Father: {fileID: 68195042} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &993389079 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 993389080} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &993389080 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 993389079} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2097573778} + m_Father: {fileID: 1151460205} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &994131360 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 994131361} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &994131361 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994131360} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1412897040} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &998862635 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 998862636} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &998862636 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 998862635} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 68195042} + m_Father: {fileID: 1120665551} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1019351138 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1019351139} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1019351139 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019351138} + serializedVersion: 2 + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 935269763} + - {fileID: 1255856681} + - {fileID: 777325323} + m_Father: {fileID: 1412897040} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1032824738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1032824739} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1032824739 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1032824738} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1120524651} + m_Father: {fileID: 2097573778} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1055996318 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1055996319} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1055996319 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1055996318} + serializedVersion: 2 + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1484246807} + m_Father: {fileID: 298011154} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1068629829 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1068629830} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1068629830 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1068629829} + serializedVersion: 2 + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 846617211} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1072460525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1072460526} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1072460526 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072460525} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 138086934} + m_Father: {fileID: 1687218885} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1078307843 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1078307844} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1078307844 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1078307843} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1087916989} + m_Father: {fileID: 936597944} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1087916988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1087916989} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1087916989 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1087916988} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 689964216} + m_Father: {fileID: 1078307844} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1108666172 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1108666173} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1108666173 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108666172} + serializedVersion: 2 + m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 668590588} + m_Father: {fileID: 371607150} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1120524650 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1120524651} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1120524651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1120524650} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1032824739} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1120665550 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1120665551} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1120665551 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1120665550} + serializedVersion: 2 + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 998862636} + m_Father: {fileID: 1202926684} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1126811420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1126811421} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1126811421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1126811420} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 42026053} + m_Father: {fileID: 1735401710} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1151460204 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1151460205} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1151460205 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1151460204} + serializedVersion: 2 + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 993389080} + m_Father: {fileID: 860044083} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1176946111 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1176946112} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1176946112 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1176946111} + serializedVersion: 2 + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2032185436} + m_Father: {fileID: 1308184864} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1185950258 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1185950259} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1185950259 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185950258} + serializedVersion: 2 + m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 437347497} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1202926683 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1202926684} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1202926684 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202926683} + serializedVersion: 2 + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1120665551} + - {fileID: 1273850663} + - {fileID: 324152167} + m_Father: {fileID: 1941594535} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1209927481 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1209927482} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1209927482 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209927481} + serializedVersion: 2 + m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1259619146} + m_Father: {fileID: 1255856681} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1232298639 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1232298640} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1232298640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1232298639} + serializedVersion: 2 + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 134573549} + m_Father: {fileID: 1641890755} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1255856680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1255856681} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1255856681 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1255856680} + serializedVersion: 2 + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 860044083} + - {fileID: 443119865} + - {fileID: 1507441566} + - {fileID: 408109126} + - {fileID: 1209927482} + m_Father: {fileID: 1019351139} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1259619145 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1259619146} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1259619146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1259619145} + serializedVersion: 2 + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 730847546} + m_Father: {fileID: 1209927482} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1260427639 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1260427640} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1260427640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260427639} + serializedVersion: 2 + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1641838338} + m_Father: {fileID: 866953093} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1273850662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1273850663} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1273850663 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1273850662} + serializedVersion: 2 + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 179016199} + m_Father: {fileID: 1202926684} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1287170476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1287170477} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1287170477 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287170476} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1987049189} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1305918812 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1305918813} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1305918813 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305918812} + serializedVersion: 2 + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 457834452} + m_Father: {fileID: 298011154} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1308184863 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1308184864} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1308184864 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308184863} + serializedVersion: 2 + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1176946112} + m_Father: {fileID: 675859161} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1313601295 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1313601296} + - component: {fileID: 1313601297} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1313601296 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1313601295} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1412897040} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &1313601297 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1313601295} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 3 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 769881371} + - {fileID: 860044083} + - {fileID: 1783272050} + - {fileID: 915895223} + - {fileID: 38476558} + - {fileID: 1735401710} + - {fileID: 1255856681} + - {fileID: 1151460205} + - {fileID: 46044537} + - {fileID: 1854384073} + - {fileID: 443119865} + - {fileID: 1507441566} + - {fileID: 408109126} + - {fileID: 1259619146} + - {fileID: 1209927482} + - {fileID: 1333956611} + - {fileID: 1534725961} + - {fileID: 706385179} + - {fileID: 1729301266} + - {fileID: 1765977908} + - {fileID: 730847546} + - {fileID: 257393201} + - {fileID: 371607150} + - {fileID: 801423770} + - {fileID: 274310897} + - {fileID: 2130665635} + - {fileID: 760443869} + - {fileID: 803839622} + - {fileID: 453408381} + - {fileID: 1108666173} + - {fileID: 668590588} + - {fileID: 9235255} + - {fileID: 136750823} + - {fileID: 1615731042} + - {fileID: 1726253866} + - {fileID: 1597156954} + - {fileID: 2019397985} + - {fileID: 604023225} + - {fileID: 1805010958} + - {fileID: 1032824739} + - {fileID: 2097573778} + - {fileID: 993389080} + - {fileID: 922170558} + - {fileID: 1719406336} + - {fileID: 548668698} + - {fileID: 1683487132} + - {fileID: 580123258} + - {fileID: 158306131} + - {fileID: 154354287} + - {fileID: 500830116} + - {fileID: 95200555} + - {fileID: 730871987} + - {fileID: 1687218885} + - {fileID: 866953093} + - {fileID: 1260427640} + - {fileID: 205846879} + - {fileID: 936597944} + - {fileID: 1078307844} + - {fileID: 1641838338} + - {fileID: 1087916989} + - {fileID: 846617211} + - {fileID: 1072460526} + - {fileID: 42026053} + - {fileID: 165461687} + - {fileID: 1126811421} + - {fileID: 777325323} + - {fileID: 1626688692} + - {fileID: 57203414} + - {fileID: 372805548} + - {fileID: 1508742174} + - {fileID: 1591871508} + - {fileID: 1925075508} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 1255856681} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} + m_DirtyAABB: 0 +--- !u!1 &1333956610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1333956611} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1333956611 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1333956610} + serializedVersion: 2 + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1719406336} + m_Father: {fileID: 1507441566} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1376923167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1376923168} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1376923168 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1376923167} + serializedVersion: 2 + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 732619709} + m_Father: {fileID: 682091242} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1412897039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1412897040} + - component: {fileID: 1412897041} + m_Layer: 0 + m_Name: npc1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1412897040 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412897039} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} + m_LocalPosition: {x: 250, y: 0, z: 305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1313601296} + - {fileID: 994131361} + - {fileID: 1019351139} + - {fileID: 686251911} + - {fileID: 731324604} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!111 &1412897041 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412897039} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!1 &1417686769 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1417686770} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1417686770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1417686769} + serializedVersion: 2 + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 149689138} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1435058300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1435058301} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1435058301 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435058300} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 217420212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1436829387 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1436829388} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1436829388 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1436829387} + serializedVersion: 2 + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 458793805} + m_Father: {fileID: 1456111964} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1437675034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1437675035} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1437675035 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437675034} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2070392242} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1445961686 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1445961687} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1445961687 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445961686} + serializedVersion: 2 + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 915895223} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1456111963 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1456111964} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1456111964 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1456111963} + serializedVersion: 2 + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 683578792} + - {fileID: 1897887745} + - {fileID: 721671422} + - {fileID: 1436829388} + - {fileID: 135814319} + m_Father: {fileID: 1473934251} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1473934250 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1473934251} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1473934251 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1473934250} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1456111964} + m_Father: {fileID: 196781248} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1484246806 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1484246807} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1484246807 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1484246806} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1717505090} + m_Father: {fileID: 1055996319} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1486169810 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1486169811} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1486169811 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1486169810} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1624225105} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1507441565 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1507441566} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1507441566 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1507441565} + serializedVersion: 2 + m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1333956611} + m_Father: {fileID: 1255856681} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1508742173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1508742174} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1508742174 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1508742173} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1591871508} + m_Father: {fileID: 372805548} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1534725960 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1534725961} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1534725961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1534725960} + serializedVersion: 2 + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1626688692} + m_Father: {fileID: 408109126} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1571658180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1571658181} + - component: {fileID: 1571658182} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1571658181 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571658180} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1571658182 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1571658180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3f24b49a96743734c8d2ef9ba2c9b32d, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1591871507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591871508} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1591871508 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591871507} + serializedVersion: 2 + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1925075508} + m_Father: {fileID: 1508742174} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1597156953 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1597156954} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1597156954 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597156953} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8026481} + m_Father: {fileID: 668590588} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1615731041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1615731042} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1615731042 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615731041} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 119741640} + m_Father: {fileID: 274310897} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1623921070 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1623921071} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1623921071 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1623921070} + serializedVersion: 2 + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 338062900} + m_Father: {fileID: 987352116} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1624225104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1624225105} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1624225105 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624225104} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1486169811} + m_Father: {fileID: 1785339272} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1624528394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1624528395} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1624528395 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624528394} + serializedVersion: 2 + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2055053893} + m_Father: {fileID: 298011154} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1626688691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1626688692} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1626688692 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626688691} + serializedVersion: 2 + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 57203414} + m_Father: {fileID: 1534725961} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1641838337 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1641838338} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1641838338 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641838337} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 835047216} + m_Father: {fileID: 1260427640} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1641890754 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1641890755} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1641890755 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641890754} + serializedVersion: 2 + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1232298640} + m_Father: {fileID: 298011154} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1681448510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1681448511} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1681448511 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1681448510} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 725918770} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1683487131 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1683487132} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1683487132 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1683487131} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 580123258} + m_Father: {fileID: 46044537} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1687218884 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1687218885} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1687218885 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687218884} + serializedVersion: 2 + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1072460526} + m_Father: {fileID: 95200555} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1717505089 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1717505090} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1717505090 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1717505089} + serializedVersion: 2 + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 785937532} + m_Father: {fileID: 1484246807} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1719406335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1719406336} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1719406336 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719406335} + serializedVersion: 2 + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 548668698} + m_Father: {fileID: 1333956611} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1726253865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1726253866} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1726253866 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1726253865} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 622121876} + m_Father: {fileID: 136750823} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1729301265 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1729301266} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1729301266 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1729301265} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 371607150} + m_Father: {fileID: 1854384073} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1732835090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1732835091} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1732835091 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1732835090} + serializedVersion: 2 + m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 381286660} + m_Father: {fileID: 298011154} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1735034888 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1735034889} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1735034889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735034888} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 991242639} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1735401709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1735401710} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1735401710 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735401709} + serializedVersion: 2 + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1126811421} + m_Father: {fileID: 860044083} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1753761744 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1753761750} + - component: {fileID: 1753761749} + - component: {fileID: 1753761748} + - component: {fileID: 1753761746} + - component: {fileID: 1753761745} + 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 &1753761745 +Skybox: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753761744} + m_Enabled: 1 + m_CustomSkybox: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} +--- !u!81 &1753761746 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753761744} + m_Enabled: 1 +--- !u!124 &1753761748 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753761744} + m_Enabled: 1 +--- !u!20 &1753761749 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753761744} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 58.5 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1753761750 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753761744} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 250, y: 1.8, z: 300} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1754969251 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1754969252} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1754969252 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1754969251} + serializedVersion: 2 + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 556768418} + m_Father: {fileID: 537665993} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1765977907 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1765977908} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1765977908 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1765977907} + serializedVersion: 2 + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 257393201} + m_Father: {fileID: 443119865} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1783272049 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1783272050} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1783272050 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783272049} + serializedVersion: 2 + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 46044537} + m_Father: {fileID: 706385179} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1784465171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1784465173} + - component: {fileID: 1784465172} + 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 &1784465172 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1784465171} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + 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_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294965503 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1784465173 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1784465171} + serializedVersion: 2 + m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} + m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1785339271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1785339272} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1785339272 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785339271} + serializedVersion: 2 + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1624225105} + m_Father: {fileID: 179016199} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1805010957 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1805010958} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1805010958 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805010957} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 730847546} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1818267081 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1818267082} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1818267082 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1818267081} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 134573549} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1845262356 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1845262357} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1845262357 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1845262356} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 165461687} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1851034959 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1851034960} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1851034960 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1851034959} + serializedVersion: 2 + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 607641931} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1854384072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1854384073} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1854384073 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1854384072} + serializedVersion: 2 + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1729301266} + m_Father: {fileID: 38476558} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1897887744 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1897887745} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1897887745 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1897887744} + serializedVersion: 2 + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 953908362} + m_Father: {fileID: 1456111964} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1899068844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1899068845} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1899068845 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899068844} + serializedVersion: 2 + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 196781248} + m_Father: {fileID: 2033428167} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1903620620 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1903620621} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1903620621 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1903620620} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2019397985} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1925075507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1925075508} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1925075508 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1925075507} + serializedVersion: 2 + m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1591871508} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1941594534 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1941594535} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1941594535 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1941594534} + serializedVersion: 2 + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1202926684} + - {fileID: 537665993} + - {fileID: 682091242} + - {fileID: 500637370} + - {fileID: 675859161} + m_Father: {fileID: 987352116} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1987049188 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1987049189} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1987049189 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1987049188} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1287170477} + m_Father: {fileID: 458793805} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2019397984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2019397985} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2019397985 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019397984} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1903620621} + m_Father: {fileID: 803839622} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2032185435 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2032185436} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2032185436 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032185435} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1176946112} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2033428166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2033428167} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2033428167 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2033428166} + serializedVersion: 2 + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 114428770} + - {fileID: 1899068845} + - {fileID: 404520935} + m_Father: {fileID: 324152167} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2055053892 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2055053893} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2055053893 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2055053892} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 597592370} + m_Father: {fileID: 1624528395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2059659451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2059659452} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2059659452 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059659451} + serializedVersion: 2 + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 114428770} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2070392241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2070392242} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2070392242 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2070392241} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1437675035} + m_Father: {fileID: 381286660} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2097573777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2097573778} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2097573778 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2097573777} + serializedVersion: 2 + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1032824739} + m_Father: {fileID: 993389080} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2115796941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2115796942} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2115796942 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2115796941} + serializedVersion: 2 + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 732619709} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2130665634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2130665635} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2130665635 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2130665634} + serializedVersion: 2 + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 803839622} + m_Father: {fileID: 371607150} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1571658181} + - {fileID: 1784465173} + - {fileID: 1412897040} + - {fileID: 1753761750} + - {fileID: 217420212} + - {fileID: 845860366} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity.meta new file mode 100644 index 0000000..83788e2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 06 - HeadBar.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a076ecd25050714ab2eda1d84dfa532 +timeCreated: 1446540639 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity new file mode 100644 index 0000000..dfc2817 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity @@ -0,0 +1,6871 @@ +%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.44745916, g: 0.49740785, b: 0.57528687, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: 2dc21c4bdbd6b4258b510d3ebeb1c9fc, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &451005637 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 451005638} + - component: {fileID: 451005639} + - component: {fileID: 451005641} + - component: {fileID: 451005640} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &451005638 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451005637} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &451005639 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451005637} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3ee84d8c960d2404893a09cb4009bee8, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &451005640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451005637} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ace51c3cbb5309547a7029cadaaa20ca, type: 3} + m_Name: + m_EditorClassIdentifier: + Items: [] + PreloadPackages: + - UI/EmitNumbers +--- !u!114 &451005641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451005637} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!114 &741969889 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748012009} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: HeadBar + componentName: HeadBar + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/HeadBar + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 145, y: 106} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!111 &742273939 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747977697} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!137 &742837355 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748043937} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 3 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 747685541} + - {fileID: 747694353} + - {fileID: 747765327} + - {fileID: 747658005} + - {fileID: 747653049} + - {fileID: 747745649} + - {fileID: 747676755} + - {fileID: 747745119} + - {fileID: 747668097} + - {fileID: 747676565} + - {fileID: 747761859} + - {fileID: 747762985} + - {fileID: 747695507} + - {fileID: 747708435} + - {fileID: 747680275} + - {fileID: 747701773} + - {fileID: 747747209} + - {fileID: 747697007} + - {fileID: 747688459} + - {fileID: 747727965} + - {fileID: 747734853} + - {fileID: 747763735} + - {fileID: 747671683} + - {fileID: 747737039} + - {fileID: 747718761} + - {fileID: 747692027} + - {fileID: 747761059} + - {fileID: 747715121} + - {fileID: 747726437} + - {fileID: 747715051} + - {fileID: 747726121} + - {fileID: 747712245} + - {fileID: 747697395} + - {fileID: 747669167} + - {fileID: 747710837} + - {fileID: 747739641} + - {fileID: 747697887} + - {fileID: 747764169} + - {fileID: 747689805} + - {fileID: 747709257} + - {fileID: 747715213} + - {fileID: 747743861} + - {fileID: 747757751} + - {fileID: 747689433} + - {fileID: 747691967} + - {fileID: 747720817} + - {fileID: 747674597} + - {fileID: 747671695} + - {fileID: 747656379} + - {fileID: 747730023} + - {fileID: 747747327} + - {fileID: 747669641} + - {fileID: 747744777} + - {fileID: 747759565} + - {fileID: 747705793} + - {fileID: 747718789} + - {fileID: 747670377} + - {fileID: 747714493} + - {fileID: 747678655} + - {fileID: 747735445} + - {fileID: 747720239} + - {fileID: 747696107} + - {fileID: 747763849} + - {fileID: 747699587} + - {fileID: 747746651} + - {fileID: 747720217} + - {fileID: 747676421} + - {fileID: 747707791} + - {fileID: 747748823} + - {fileID: 747667509} + - {fileID: 747677235} + - {fileID: 747669843} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 747676755} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} + m_DirtyAABB: 0 +--- !u!4 &747653049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748001455} + serializedVersion: 2 + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747676565} + m_Father: {fileID: 747697007} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747656379 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748011971} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747718789} + m_Father: {fileID: 747671695} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747658005 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747977499} + serializedVersion: 2 + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747732607} + m_Father: {fileID: 747697007} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747667509 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747999313} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747677235} + m_Father: {fileID: 747748823} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747668097 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747999325} + serializedVersion: 2 + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747720817} + m_Father: {fileID: 747765327} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747668581 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747995489} + serializedVersion: 2 + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747739641} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747669167 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748039089} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747699837} + m_Father: {fileID: 747718761} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747669381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748043937} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747739077} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747669641 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748005503} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747720239} + m_Father: {fileID: 747730023} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747669843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747997303} + serializedVersion: 2 + m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747677235} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747670377 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748021851} + serializedVersion: 2 + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747714493} + m_Father: {fileID: 747674597} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747671475 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747990293} + serializedVersion: 2 + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747744551} + - {fileID: 747676755} + - {fileID: 747720217} + m_Father: {fileID: 747739077} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747671683 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748055205} + serializedVersion: 2 + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747737039} + - {fileID: 747712245} + - {fileID: 747715051} + - {fileID: 747692027} + - {fileID: 747761059} + m_Father: {fileID: 747688459} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747671695 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747976201} + serializedVersion: 2 + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747656379} + m_Father: {fileID: 747674597} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747674597 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748030713} + serializedVersion: 2 + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747671695} + - {fileID: 747670377} + - {fileID: 747759565} + - {fileID: 747730023} + - {fileID: 747747327} + m_Father: {fileID: 747720817} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747676421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748046791} + serializedVersion: 2 + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747707791} + m_Father: {fileID: 747747209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747676565 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748037893} + serializedVersion: 2 + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747688459} + m_Father: {fileID: 747653049} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747676755 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747989589} + serializedVersion: 2 + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747694353} + - {fileID: 747761859} + - {fileID: 747762985} + - {fileID: 747695507} + - {fileID: 747680275} + m_Father: {fileID: 747671475} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747677235 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747969751} + serializedVersion: 2 + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747669843} + m_Father: {fileID: 747667509} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747678655 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748026567} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747694829} + m_Father: {fileID: 747705793} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747679097 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748005625} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747696107} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747679889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748049095} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747699587} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747680275 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747950271} + serializedVersion: 2 + m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747708435} + m_Father: {fileID: 747676755} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747685541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747968275} + serializedVersion: 2 + m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747697007} + m_Father: {fileID: 747694353} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747686381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748012009} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} + m_LocalPosition: {x: 0, y: 2.3, z: 0} + m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747739077} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747687051 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748019781} + serializedVersion: 2 + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747710837} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747688459 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748009121} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747671683} + m_Father: {fileID: 747676565} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747689433 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747972211} + serializedVersion: 2 + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747691967} + m_Father: {fileID: 747701773} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747689805 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748040323} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747734853} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747691967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747971061} + serializedVersion: 2 + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747689433} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747692027 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747967315} + serializedVersion: 2 + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747715121} + m_Father: {fileID: 747671683} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747694353 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748039393} + serializedVersion: 2 + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747745119} + - {fileID: 747745649} + - {fileID: 747685541} + m_Father: {fileID: 747676755} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747694829 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747998205} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747678655} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747695507 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748017485} + serializedVersion: 2 + m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747747209} + m_Father: {fileID: 747676755} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747696107 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747970635} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747679097} + m_Father: {fileID: 747744777} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747697007 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748059501} + serializedVersion: 2 + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747658005} + - {fileID: 747653049} + - {fileID: 747765327} + m_Father: {fileID: 747685541} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747697395 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748030961} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747710837} + m_Father: {fileID: 747712245} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747697887 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748030095} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747713395} + m_Father: {fileID: 747715121} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747699587 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748037469} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747679889} + m_Father: {fileID: 747763849} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747699837 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748003027} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747669167} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747701773 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748024999} + serializedVersion: 2 + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747689433} + m_Father: {fileID: 747762985} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747704433 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747986915} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747709257} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747705793 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747973429} + serializedVersion: 2 + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747678655} + m_Father: {fileID: 747759565} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747707791 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747998177} + serializedVersion: 2 + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747676421} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747708003 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748042173} + serializedVersion: 2 + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747720239} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747708435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747972121} + serializedVersion: 2 + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747734853} + m_Father: {fileID: 747680275} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747709257 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747964151} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747704433} + m_Father: {fileID: 747715213} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747710837 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748010693} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747687051} + m_Father: {fileID: 747697395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747712245 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748027897} + serializedVersion: 2 + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747697395} + m_Father: {fileID: 747671683} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747713395 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748006059} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747697887} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747714493 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747971149} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747735445} + m_Father: {fileID: 747670377} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747715051 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748012367} + serializedVersion: 2 + m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747726121} + m_Father: {fileID: 747671683} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747715121 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748030139} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747697887} + m_Father: {fileID: 747692027} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747715213 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748029345} + serializedVersion: 2 + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747709257} + m_Father: {fileID: 747743861} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747718761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747971737} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747669167} + m_Father: {fileID: 747737039} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747718789 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748009705} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747764773} + m_Father: {fileID: 747656379} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747720217 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747970509} + serializedVersion: 2 + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747748823} + m_Father: {fileID: 747671475} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747720239 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748035393} + serializedVersion: 2 + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747708003} + m_Father: {fileID: 747669641} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747720817 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748045839} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747674597} + m_Father: {fileID: 747668097} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747726121 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748049713} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747739641} + m_Father: {fileID: 747715051} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747726347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748049975} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747735445} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747726437 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747971807} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747764169} + m_Father: {fileID: 747761059} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747727965 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748059835} + serializedVersion: 2 + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747763735} + m_Father: {fileID: 747761859} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747730023 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748011237} + serializedVersion: 2 + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747669641} + m_Father: {fileID: 747674597} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747732607 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748041977} + serializedVersion: 2 + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747658005} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747734853 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748047647} + serializedVersion: 2 + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747689805} + m_Father: {fileID: 747708435} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747735445 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748024901} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747726347} + m_Father: {fileID: 747714493} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747737039 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748034719} + serializedVersion: 2 + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747718761} + m_Father: {fileID: 747671683} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747738619 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748046591} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747739077} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747739077 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747977697} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} + m_LocalPosition: {x: 251, y: 0, z: 305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747669381} + - {fileID: 747738619} + - {fileID: 747671475} + - {fileID: 747745695} + - {fileID: 747686381} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747739641 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748015179} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747668581} + m_Father: {fileID: 747726121} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747741871 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747996779} + serializedVersion: 2 + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747764169} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747743861 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747977753} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747715213} + m_Father: {fileID: 747745119} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747744551 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748023197} + serializedVersion: 2 + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747671475} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747744777 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747966687} + serializedVersion: 2 + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747696107} + m_Father: {fileID: 747747327} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747745119 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747993473} + serializedVersion: 2 + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747743861} + m_Father: {fileID: 747694353} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747745649 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748019947} + serializedVersion: 2 + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747746651} + m_Father: {fileID: 747694353} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747745695 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747951567} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747739077} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747746651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748054235} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747763849} + m_Father: {fileID: 747745649} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747747209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748036221} + serializedVersion: 2 + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747676421} + m_Father: {fileID: 747695507} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747747327 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748055399} + serializedVersion: 2 + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747744777} + m_Father: {fileID: 747674597} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747748823 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748026219} + serializedVersion: 2 + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747667509} + m_Father: {fileID: 747720217} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747757751 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748007477} + serializedVersion: 2 + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747763735} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747759565 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748053139} + serializedVersion: 2 + m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747705793} + m_Father: {fileID: 747674597} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747761059 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747966989} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747726437} + m_Father: {fileID: 747671683} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747761859 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747990879} + serializedVersion: 2 + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747727965} + m_Father: {fileID: 747676755} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747762985 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748038231} + serializedVersion: 2 + m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747701773} + m_Father: {fileID: 747676755} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747763735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747995573} + serializedVersion: 2 + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747757751} + m_Father: {fileID: 747727965} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747763849 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748001937} + serializedVersion: 2 + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747699587} + m_Father: {fileID: 747746651} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747764169 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748026319} + serializedVersion: 2 + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747741871} + m_Father: {fileID: 747726437} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747764773 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747996721} + serializedVersion: 2 + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 747718789} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &747765327 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 748029365} + serializedVersion: 2 + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 747668097} + m_Father: {fileID: 747697007} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &747950271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747680275} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747951567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747745695} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747964151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747709257} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747966687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747744777} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747966989 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747761059} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747967315 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747692027} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747968275 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747685541} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747969751 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747677235} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747970509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747720217} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747970635 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747696107} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747971061 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747691967} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747971149 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747714493} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747971737 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747718761} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747971807 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747726437} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747972121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747708435} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747972211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747689433} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747973429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747705793} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747976201 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747671695} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747977499 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747658005} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747977697 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747739077} + - component: {fileID: 742273939} + m_Layer: 0 + m_Name: npc2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747977753 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747743861} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747986915 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747704433} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747989589 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747676755} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747990293 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747671475} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747990879 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747761859} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747993473 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747745119} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747995489 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747668581} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747995573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747763735} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747996721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747764773} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747996779 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747741871} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747997303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747669843} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747998177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747707791} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747998205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747694829} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747999313 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747667509} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &747999325 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747668097} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748001455 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747653049} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748001937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747763849} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748003027 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747699837} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748005503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747669641} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748005625 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747679097} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748006059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747713395} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748007477 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747757751} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748009121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747688459} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748009705 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747718789} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748010693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747710837} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748011237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747730023} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748011971 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747656379} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748012009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747686381} + - component: {fileID: 741969889} + m_Layer: 0 + m_Name: HeadBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748012367 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747715051} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748015179 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747739641} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748017485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747695507} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748019781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747687051} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748019947 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747745649} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748021851 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747670377} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748023197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747744551} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748024901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747735445} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748024999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747701773} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748026219 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747748823} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748026319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747764169} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748026567 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747678655} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748027897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747712245} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748029345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747715213} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748029365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747765327} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748030095 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747697887} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748030139 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747715121} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748030713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747674597} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748030961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747697395} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748034719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747737039} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748035393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747720239} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748036221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747747209} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748037469 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747699587} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748037893 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747676565} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748038231 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747762985} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748039089 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747669167} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748039393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747694353} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748040323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747689805} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748041977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747732607} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748042173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747708003} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748043937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747669381} + - component: {fileID: 742837355} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748045839 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747720817} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748046591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747738619} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748046791 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747676421} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748047647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747734853} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748049095 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747679889} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748049713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747726121} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748049975 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747726347} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748053139 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747759565} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748054235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747746651} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748055205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747671683} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748055399 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747747327} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748059501 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747697007} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &748059835 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747727965} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1287094003 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1287094004} + m_Layer: 0 + m_Name: Lights + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1287094004 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287094003} + serializedVersion: 2 + 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: 1479529857} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1479529856 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1479529857} + - component: {fileID: 1479529858} + m_Layer: 0 + m_Name: Directional light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1479529857 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1479529856} + serializedVersion: 2 + m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} + m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1287094004} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &1479529858 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1479529856} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1.6 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + 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_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294965503 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &1753750257 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1753750260} + - component: {fileID: 1753750259} + - component: {fileID: 1753750258} + m_Layer: 0 + m_Name: Terrain + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!154 &1753750258 +TerrainCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753750257} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_TerrainData: {fileID: 15600000, guid: 6f0d27f5a7a2d814dbef423c18fa3b40, type: 2} + m_EnableTreeColliders: 1 +--- !u!218 &1753750259 +Terrain: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753750257} + m_Enabled: 1 + serializedVersion: 6 + m_TerrainData: {fileID: 15600000, guid: 6f0d27f5a7a2d814dbef423c18fa3b40, type: 2} + m_TreeDistance: 5000 + m_TreeBillboardDistance: 50 + m_TreeCrossFadeLength: 5 + m_TreeMaximumFullLODCount: 50 + m_DetailObjectDistance: 80 + m_DetailObjectDensity: 1 + m_HeightmapPixelError: 5 + m_SplatMapDistance: 1000 + m_HeightmapMaximumLOD: 0 + m_ShadowCastingMode: 2 + m_DrawHeightmap: 1 + m_DrawInstanced: 0 + m_DrawTreesAndFoliage: 1 + m_StaticShadowCaster: 0 + m_IgnoreQualitySettings: 0 + m_ReflectionProbeUsage: 1 + m_MaterialTemplate: {fileID: 10652, guid: 0000000000000000f000000000000000, type: 0} + m_BakeLightProbesForTrees: 1 + m_PreserveTreePrototypeLayers: 0 + m_DeringLightProbesForTrees: 1 + m_ReceiveGI: 1 + m_ScaleInLightmap: 0.0512 + m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0} + m_GroupingID: 0 + m_RenderingLayerMask: 1 + m_AllowAutoConnect: 0 + m_EnableHeightmapRayTracing: 1 + m_EnableTreesAndDetailsRayTracing: 0 + m_TreeMotionVectorModeOverride: 3 +--- !u!4 &1753750260 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1753750257} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1948259025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955355865} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: HeadBar + componentName: HeadBar + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/HeadBar + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 145, y: 106} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!111 &1948757667 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955374801} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!137 &1952403803 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955570577} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 3 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 1955158933} + - {fileID: 1955165217} + - {fileID: 1955095423} + - {fileID: 1955186213} + - {fileID: 1955191433} + - {fileID: 1955081281} + - {fileID: 1955150179} + - {fileID: 1955082863} + - {fileID: 1955143601} + - {fileID: 1955151525} + - {fileID: 1955098099} + - {fileID: 1955096601} + - {fileID: 1955164323} + - {fileID: 1955118371} + - {fileID: 1955147555} + - {fileID: 1955109693} + - {fileID: 1955080889} + - {fileID: 1955163743} + - {fileID: 1955155771} + - {fileID: 1955131757} + - {fileID: 1955076725} + - {fileID: 1955095847} + - {fileID: 1955138995} + - {fileID: 1955074815} + - {fileID: 1955124569} + - {fileID: 1955152587} + - {fileID: 1955098771} + - {fileID: 1955112705} + - {fileID: 1955134293} + - {fileID: 1955112155} + - {fileID: 1955133465} + - {fileID: 1955115973} + - {fileID: 1955162563} + - {fileID: 1955142559} + - {fileID: 1955116101} + - {fileID: 1955071177} + - {fileID: 1955163119} + - {fileID: 1955095801} + - {fileID: 1955154557} + - {fileID: 1955118713} + - {fileID: 1955112893} + - {fileID: 1955084101} + - {fileID: 1955102087} + - {fileID: 1955154153} + - {fileID: 1955152527} + - {fileID: 1955122497} + - {fileID: 1955137237} + - {fileID: 1955139007} + - {fileID: 1955187083} + - {fileID: 1955129687} + - {fileID: 1955080911} + - {fileID: 1955141049} + - {fileID: 1955083065} + - {fileID: 1955101437} + - {fileID: 1955105009} + - {fileID: 1955124661} + - {fileID: 1955141209} + - {fileID: 1955113613} + - {fileID: 1955149455} + - {fileID: 1955075237} + - {fileID: 1955123999} + - {fileID: 1955164891} + - {fileID: 1955095993} + - {fileID: 1955160243} + - {fileID: 1955080299} + - {fileID: 1955124009} + - {fileID: 1955151413} + - {fileID: 1955102911} + - {fileID: 1955078375} + - {fileID: 1955142917} + - {fileID: 1955150595} + - {fileID: 1955140707} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 1955150179} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} + m_DirtyAABB: 0 +--- !u!4 &1955071177 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955353467} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955141973} + m_Father: {fileID: 1955133465} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955072203 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955583439} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955072757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955072757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955374801} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} + m_LocalPosition: {x: 248, y: 0, z: 305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955142325} + - {fileID: 1955072203} + - {fileID: 1955140227} + - {fileID: 1955081391} + - {fileID: 1955157213} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955074815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955563439} + serializedVersion: 2 + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955124569} + m_Father: {fileID: 1955138995} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955075237 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955359093} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955134267} + m_Father: {fileID: 1955113613} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955076725 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955581999} + serializedVersion: 2 + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955154557} + m_Father: {fileID: 1955118371} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955078375 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955357787} + serializedVersion: 2 + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955142917} + m_Father: {fileID: 1955124009} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955080299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955593195} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955095993} + m_Father: {fileID: 1955081281} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955080889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955577165} + serializedVersion: 2 + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955151413} + m_Father: {fileID: 1955164323} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955080911 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955591767} + serializedVersion: 2 + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955083065} + m_Father: {fileID: 1955137237} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955081281 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955364315} + serializedVersion: 2 + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955080299} + m_Father: {fileID: 1955165217} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955081391 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955416319} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955072757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955082263 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955360941} + serializedVersion: 2 + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955140227} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955082863 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955390641} + serializedVersion: 2 + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955084101} + m_Father: {fileID: 1955165217} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955083065 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955368431} + serializedVersion: 2 + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955164891} + m_Father: {fileID: 1955080911} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955084101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955373353} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955112893} + m_Father: {fileID: 1955082863} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955086239 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955339099} + serializedVersion: 2 + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955095801} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955094805 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955339009} + serializedVersion: 2 + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955124661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955095423 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955567749} + serializedVersion: 2 + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955143601} + m_Father: {fileID: 1955163743} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955095801 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955357951} + serializedVersion: 2 + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955086239} + m_Father: {fileID: 1955134293} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955095847 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955339397} + serializedVersion: 2 + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955102087} + m_Father: {fileID: 1955131757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955095993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955334049} + serializedVersion: 2 + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955160243} + m_Father: {fileID: 1955080299} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955096601 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955575143} + serializedVersion: 2 + m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955109693} + m_Father: {fileID: 1955150179} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955098099 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955394159} + serializedVersion: 2 + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955131757} + m_Father: {fileID: 1955150179} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955098771 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955368765} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955134293} + m_Father: {fileID: 1955138995} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955101437 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955594147} + serializedVersion: 2 + m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955105009} + m_Father: {fileID: 1955137237} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955102087 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955343621} + serializedVersion: 2 + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955095847} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955102911 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955337937} + serializedVersion: 2 + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955151413} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955103571 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955572365} + serializedVersion: 2 + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955123999} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955105009 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955378693} + serializedVersion: 2 + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955149455} + m_Father: {fileID: 1955101437} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955106113 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955381971} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955118713} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955109693 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955359127} + serializedVersion: 2 + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955154153} + m_Father: {fileID: 1955096601} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955112155 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955356287} + serializedVersion: 2 + m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955133465} + m_Father: {fileID: 1955138995} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955112705 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955566987} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955163119} + m_Father: {fileID: 1955152587} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955112893 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955567761} + serializedVersion: 2 + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955118713} + m_Father: {fileID: 1955084101} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955113613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955381117} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955075237} + m_Father: {fileID: 1955141209} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955114563 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955346331} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955163119} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955115973 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955357385} + serializedVersion: 2 + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955162563} + m_Father: {fileID: 1955138995} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955116101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955340789} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955156411} + m_Father: {fileID: 1955162563} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955118371 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955380009} + serializedVersion: 2 + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955076725} + m_Father: {fileID: 1955147555} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955118713 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955371975} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955106113} + m_Father: {fileID: 1955112893} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955122497 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955584831} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955137237} + m_Father: {fileID: 1955143601} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955123999 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955561585} + serializedVersion: 2 + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955103571} + m_Father: {fileID: 1955141049} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955124009 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955365629} + serializedVersion: 2 + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955078375} + m_Father: {fileID: 1955140227} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955124569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955379625} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955142559} + m_Father: {fileID: 1955074815} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955124661 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955341785} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955094805} + m_Father: {fileID: 1955187083} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955128143 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955572681} + serializedVersion: 2 + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955186213} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955129687 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955341269} + serializedVersion: 2 + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955141049} + m_Father: {fileID: 1955137237} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955131757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955586443} + serializedVersion: 2 + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955095847} + m_Father: {fileID: 1955098099} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955133465 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955579905} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955071177} + m_Father: {fileID: 1955112155} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955134267 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955580679} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955075237} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955134293 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955379695} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955095801} + m_Father: {fileID: 1955098771} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955137237 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955567561} + serializedVersion: 2 + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955139007} + - {fileID: 1955141209} + - {fileID: 1955101437} + - {fileID: 1955129687} + - {fileID: 1955080911} + m_Father: {fileID: 1955122497} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955138995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955592085} + serializedVersion: 2 + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955074815} + - {fileID: 1955115973} + - {fileID: 1955112155} + - {fileID: 1955152587} + - {fileID: 1955098771} + m_Father: {fileID: 1955155771} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955139007 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955375929} + serializedVersion: 2 + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955187083} + m_Father: {fileID: 1955137237} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955140227 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955393573} + serializedVersion: 2 + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955082263} + - {fileID: 1955150179} + - {fileID: 1955124009} + m_Father: {fileID: 1955072757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955140707 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955337543} + serializedVersion: 2 + m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955150595} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955141049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955345743} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955123999} + m_Father: {fileID: 1955129687} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955141209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955362155} + serializedVersion: 2 + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955113613} + m_Father: {fileID: 1955137237} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955141973 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955339345} + serializedVersion: 2 + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955071177} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955142325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955570577} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955072757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955142559 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955575425} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955160909} + m_Father: {fileID: 1955124569} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955142917 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955335521} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955150595} + m_Father: {fileID: 1955078375} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955143601 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955335533} + serializedVersion: 2 + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955122497} + m_Father: {fileID: 1955095423} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955147169 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955581943} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955160243} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955147555 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955417487} + serializedVersion: 2 + m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955118371} + m_Father: {fileID: 1955150179} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955147849 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955345865} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955164891} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955149455 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955358711} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955166173} + m_Father: {fileID: 1955105009} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955150179 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955395429} + serializedVersion: 2 + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955165217} + - {fileID: 1955098099} + - {fileID: 1955096601} + - {fileID: 1955164323} + - {fileID: 1955147555} + m_Father: {fileID: 1955140227} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955150595 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955365351} + serializedVersion: 2 + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955140707} + m_Father: {fileID: 1955142917} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955151413 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955583223} + serializedVersion: 2 + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955102911} + m_Father: {fileID: 1955080889} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955151525 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955576373} + serializedVersion: 2 + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955155771} + m_Father: {fileID: 1955191433} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955152527 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955380421} + serializedVersion: 2 + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955154153} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955152587 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955368547} + serializedVersion: 2 + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955112705} + m_Father: {fileID: 1955138995} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955154153 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955380035} + serializedVersion: 2 + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955152527} + m_Father: {fileID: 1955109693} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955154557 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955573171} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955076725} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955155771 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955343249} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955138995} + m_Father: {fileID: 1955151525} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955156411 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955364213} + serializedVersion: 2 + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955116101} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955157213 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955355865} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} + m_LocalPosition: {x: 0, y: 2.3, z: 0} + m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955072757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955158933 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955367459} + serializedVersion: 2 + m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955163743} + m_Father: {fileID: 1955165217} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955160243 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955575917} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955147169} + m_Father: {fileID: 1955095993} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955160909 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955333091} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955142559} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955162563 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955567297} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955116101} + m_Father: {fileID: 1955115973} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955163119 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955567039} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955114563} + m_Father: {fileID: 1955112705} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955163743 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955587677} + serializedVersion: 2 + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955186213} + - {fileID: 1955191433} + - {fileID: 1955095423} + m_Father: {fileID: 1955158933} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955164323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955351165} + serializedVersion: 2 + m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955080889} + m_Father: {fileID: 1955150179} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955164891 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955380603} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955147849} + m_Father: {fileID: 1955083065} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955165217 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955574225} + serializedVersion: 2 + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955082863} + - {fileID: 1955081281} + - {fileID: 1955158933} + m_Father: {fileID: 1955150179} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955166173 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955337933} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1955149455} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955186213 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955374635} + serializedVersion: 2 + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955128143} + m_Father: {fileID: 1955163743} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955187083 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955355891} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955124661} + m_Father: {fileID: 1955139007} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &1955191433 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1955333535} + serializedVersion: 2 + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1955151525} + m_Father: {fileID: 1955163743} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1955333091 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955160909} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955333535 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955191433} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955334049 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955095993} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955335521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955142917} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955335533 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955143601} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955337543 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955140707} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955337933 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955166173} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955337937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955102911} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955339009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955094805} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955339099 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955086239} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955339345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955141973} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955339397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955095847} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955340789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955116101} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955341269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955129687} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955341785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955124661} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955343249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955155771} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955343621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955102087} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955345743 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955141049} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955345865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955147849} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955346331 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955114563} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955351165 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955164323} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955353467 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955071177} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955355865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955157213} + - component: {fileID: 1948259025} + m_Layer: 0 + m_Name: HeadBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955355891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955187083} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955356287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955112155} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955357385 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955115973} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955357787 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955078375} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955357951 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955095801} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955358711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955149455} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955359093 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955075237} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955359127 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955109693} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955360941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955082263} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955362155 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955141209} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955364213 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955156411} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955364315 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955081281} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955365351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955150595} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955365629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955124009} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955367459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955158933} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955368431 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955083065} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955368547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955152587} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955368765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955098771} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955371975 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955118713} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955373353 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955084101} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955374635 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955186213} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955374801 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955072757} + - component: {fileID: 1948757667} + m_Layer: 0 + m_Name: npc1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955375929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955139007} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955378693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955105009} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955379625 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955124569} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955379695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955134293} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955380009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955118371} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955380035 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955154153} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955380421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955152527} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955380603 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955164891} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955381117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955113613} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955381971 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955106113} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955390641 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955082863} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955393573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955140227} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955394159 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955098099} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955395429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955150179} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955416319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955081391} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955417487 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955147555} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955561585 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955123999} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955563439 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955074815} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955566987 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955112705} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955567039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955163119} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955567297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955162563} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955567561 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955137237} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955567749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955095423} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955567761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955112893} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955570577 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955142325} + - component: {fileID: 1952403803} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955572365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955103571} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955572681 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955128143} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955573171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955154557} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955574225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955165217} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955575143 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955096601} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955575425 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955142559} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955575917 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955160243} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955576373 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955151525} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955577165 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955080889} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955579905 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955133465} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955580679 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955134267} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955581943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955147169} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955581999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955076725} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955583223 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955151413} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955583439 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955072203} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955584831 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955122497} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955586443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955131757} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955587677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955163743} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955591767 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955080911} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955592085 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955138995} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955593195 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955080299} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1955594147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955101437} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &2008426064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2008426069} + - component: {fileID: 2008426068} + - component: {fileID: 2008426065} + 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 &2008426065 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2008426064} + m_Enabled: 1 +--- !u!20 &2008426068 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2008426064} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 58.5 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2008426069 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2008426064} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 250, y: 1.8, z: 300} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2048358715 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2048358718} + - component: {fileID: 2048358717} + - component: {fileID: 2048358716} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2048358716 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2048358715} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &2048358717 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2048358715} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2048358718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2048358715} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9.105556, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 451005638} + - {fileID: 1287094004} + - {fileID: 1955072757} + - {fileID: 2008426069} + - {fileID: 747739077} + - {fileID: 1753750260} + - {fileID: 2048358718} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity.meta new file mode 100644 index 0000000..b037356 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 07 - EmitNumbers.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba9fecbe33a8173448d5c4e65809460f +timeCreated: 1446569181 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity new file mode 100644 index 0000000..c402615 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &428553806 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 428553808} + - component: {fileID: 428553810} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &428553808 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 428553806} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &428553810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 428553806} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &460405318 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 460405321} + - component: {fileID: 460405320} + - component: {fileID: 460405319} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &460405319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 460405318} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &460405320 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 460405318} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &460405321 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 460405318} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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 &1454169315 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1454169318} + - component: {fileID: 1454169317} + - component: {fileID: 1454169316} + 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 &1454169316 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1454169315} + m_Enabled: 1 +--- !u!20 &1454169317 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1454169315} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1454169318 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1454169315} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1652253660 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1652253662} + - component: {fileID: 1652253661} + - component: {fileID: 1652253663} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1652253661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1652253660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Transition + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Transition + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1652253662 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1652253660} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1652253663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1652253660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ab67b9a9f47fd3343b5aeb1333ea0527, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity.meta new file mode 100644 index 0000000..2b116a6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 08 - Transition.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da16b4e6c83f4644091ac783878ae6ec +timeCreated: 1446602522 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity new file mode 100644 index 0000000..87d6933 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &559719747 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 559719750} + - component: {fileID: 559719749} + - component: {fileID: 559719748} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &559719748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 559719747} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &559719749 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 559719747} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &559719750 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 559719747} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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 &1775392814 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1775392817} + - component: {fileID: 1775392816} + - component: {fileID: 1775392815} + 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 &1775392815 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1775392814} + m_Enabled: 1 +--- !u!20 &1775392816 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1775392814} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1775392817 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1775392814} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1854972867 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1854972869} + - component: {fileID: 1854972871} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1854972869 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1854972867} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1854972871 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1854972867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &1871869241 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1871869243} + - component: {fileID: 1871869242} + - component: {fileID: 1871869244} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1871869242 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1871869241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Extension + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Extension + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1871869243 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1871869241} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1871869244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1871869241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b0647927cbff65449b89590caf97481, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity.meta new file mode 100644 index 0000000..61de59e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 09 - Extension.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3aa4363269faec8498ef949480f5e8b5 +timeCreated: 1446611222 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity new file mode 100644 index 0000000..def653a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity @@ -0,0 +1,447 @@ +%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.37311924, g: 0.38073963, b: 0.3587269, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: bbef2d61aa59c4ee8867c3b33961ca9e, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1676981388 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1676981391} + - component: {fileID: 1676981390} + - component: {fileID: 1676981389} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1676981389 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1676981388} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1676981390 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1676981388} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1676981391 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1676981388} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9.105556, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1810466734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1810466736} + - component: {fileID: 1810466735} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1810466735 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810466734} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &1810466736 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810466734} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1811797492 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1811797495} + - component: {fileID: 1811797494} + - component: {fileID: 1811797493} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1811797493 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811797492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81df70f0eca40f24eb4d6448b5e3ed22, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1811797494 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811797492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: ModalWaiting + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/ModalWaiting + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1811797495 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1811797492} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2107738555 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2107738560} + - component: {fileID: 2107738559} + - component: {fileID: 2107738556} + 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 &2107738556 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2107738555} + m_Enabled: 1 +--- !u!20 &2107738559 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2107738555} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2107738560 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2107738555} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.773, y: 3.109, z: -6.169} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1810466736} + - {fileID: 1811797495} + - {fileID: 2107738560} + - {fileID: 1676981391} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity.meta new file mode 100644 index 0000000..28df7a9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 10 - ModalWaiting.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2708cf66c28ec534b9e230cbf277f9f7 +timeCreated: 1447054792 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity new file mode 100644 index 0000000..3a34a90 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity @@ -0,0 +1,289 @@ +%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.37311915, g: 0.3807396, b: 0.35872662, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: db780d76a4dfc49ac91d04035c2eee4c, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &952070760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 952070765} + - component: {fileID: 952070764} + - component: {fileID: 952070761} + m_Layer: 0 + m_Name: Main Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &952070761 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952070760} + m_Enabled: 1 +--- !u!20 &952070764 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952070760} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 3000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &952070765 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952070760} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -4.16, y: 1.09, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1291441921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1291441923} + - component: {fileID: 1291441922} + - component: {fileID: 1291441924} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1291441922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1291441921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f0c05fcb4b735cf4587717a360b2a231, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1291441923 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1291441921} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1291441924 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1291441921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1291441923} + - {fileID: 952070765} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity.meta new file mode 100644 index 0000000..1a742ab --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 11 - CutScene.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4efea31a316b050439851afe65f4de37 +timeCreated: 1446611156 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity new file mode 100644 index 0000000..26d5896 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity @@ -0,0 +1,447 @@ +%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.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientEquatorColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientGroundColor: {r: 0.3602941, g: 0.3602941, b: 0.3602941, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 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, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 10 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: bcebafccb0da14c389e2ce237a9c7c8a, + type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &392768408 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 392768413} + - component: {fileID: 392768412} + - component: {fileID: 392768409} + 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 &392768409 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392768408} + m_Enabled: 1 +--- !u!20 &392768412 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392768408} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &392768413 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392768408} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.773, y: 3.109, z: -6.169} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &871184436 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 871184437} + - component: {fileID: 871184440} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &871184437 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 871184436} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &871184440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 871184436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &1446089695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1446089698} + - component: {fileID: 1446089697} + - component: {fileID: 1446089696} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1446089696 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446089695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d029d4d78090c764a97f4497beff32e3, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1446089697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446089695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: RenderTexture + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/RenderTexture + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1446089698 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446089695} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2097587200 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2097587203} + - component: {fileID: 2097587202} + - component: {fileID: 2097587201} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2097587201 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2097587200} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &2097587202 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2097587200} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2097587203 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2097587200} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9.105556, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 871184437} + - {fileID: 1446089698} + - {fileID: 392768413} + - {fileID: 2097587203} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity.meta new file mode 100644 index 0000000..ce06e4c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 12 - RenderTexture.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c830bc4febb89840805f5f6f21e8138 +timeCreated: 1446193142 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity new file mode 100644 index 0000000..119845b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity @@ -0,0 +1,447 @@ +%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.37311915, g: 0.3807396, b: 0.35872662, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: a38ce872dabee4f389f33808b08a6357, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &226058906 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 226058911} + - component: {fileID: 226058910} + - component: {fileID: 226058907} + 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 &226058907 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 226058906} + m_Enabled: 1 +--- !u!20 &226058910 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 226058906} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &226058911 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 226058906} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.773, y: 3.109, z: -6.169} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &576010458 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 576010460} + - component: {fileID: 576010462} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &576010460 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576010458} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &576010462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576010458} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &1451674696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1451674699} + - component: {fileID: 1451674698} + - component: {fileID: 1451674697} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1451674697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451674696} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1451674698 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451674696} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1451674699 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1451674696} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9.105556, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2028563588 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2028563591} + - component: {fileID: 2028563590} + - component: {fileID: 2028563589} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2028563589 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2028563588} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1be113d23714dfb49819b314ffb3ffdc, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2028563590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2028563588} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Particles + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Particles + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &2028563591 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2028563588} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 576010460} + - {fileID: 2028563591} + - {fileID: 1451674699} + - {fileID: 226058911} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity.meta new file mode 100644 index 0000000..c32909c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 13 - Particles.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a9b321846468334dbd1f454f043c695 +timeCreated: 1446770031 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity new file mode 100644 index 0000000..d77bcf4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity @@ -0,0 +1,247 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1940204561 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1940204563} + - component: {fileID: 1940204562} + - component: {fileID: 1940204564} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1940204562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1940204561} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c34dde491ef252c49af798031b5a37de, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1940204563 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1940204561} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1940204564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1940204561} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &2070229389 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2070229392} + - component: {fileID: 2070229391} + - component: {fileID: 2070229390} + 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 &2070229390 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2070229389} + m_Enabled: 1 +--- !u!20 &2070229391 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2070229389} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2070229392 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2070229389} + 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: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity.meta new file mode 100644 index 0000000..d8ebc24 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 14 - BundleUsage.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f26c5ad5e95062042b887d68c717fa5e +timeCreated: 1446611044 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity new file mode 100644 index 0000000..b5f8be9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &8781590 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 8781593} + - component: {fileID: 8781592} + - component: {fileID: 8781591} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &8781591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 8781590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &8781592 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 8781590} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &8781593 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 8781590} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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 &174876960 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 174876963} + - component: {fileID: 174876962} + - component: {fileID: 174876961} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &174876961 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 174876960} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cfc2db50aaedb7843a486cc282c0ec02, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &174876962 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 174876960} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: VirtualList + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/VirtualList + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &174876963 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 174876960} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &603571830 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 603571832} + - component: {fileID: 603571833} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &603571832 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 603571830} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &603571833 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 603571830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &1169016405 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1169016408} + - component: {fileID: 1169016407} + - component: {fileID: 1169016406} + 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 &1169016406 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1169016405} + m_Enabled: 1 +--- !u!20 &1169016407 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1169016405} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1169016408 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1169016405} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity.meta new file mode 100644 index 0000000..ba1d093 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 15 - VirtualList.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b75df39b8fbcc7f469a7335938f54d7e +timeCreated: 1456387382 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity new file mode 100644 index 0000000..d371ed0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &953670264 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 953670266} + - component: {fileID: 953670267} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &953670266 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 953670264} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &953670267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 953670264} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &1804857624 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1804857627} + - component: {fileID: 1804857626} + - component: {fileID: 1804857625} + 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 &1804857625 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1804857624} + m_Enabled: 1 +--- !u!20 &1804857626 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1804857624} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1804857627 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1804857624} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1823051046 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1823051049} + - component: {fileID: 1823051048} + - component: {fileID: 1823051047} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1823051047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1823051046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1823051048 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1823051046} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1823051049 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1823051046} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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 &2006949992 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2006949995} + - component: {fileID: 2006949994} + - component: {fileID: 2006949993} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2006949993 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2006949992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bab7cb69f587250498d0079f0e323fb0, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &2006949994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2006949992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: LoopList + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/LoopList + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &2006949995 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2006949992} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity.meta new file mode 100644 index 0000000..814a04c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 16 - LoopList.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bdd703e7d454b1441a6f90bb1dccd3d6 +timeCreated: 1456388435 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity new file mode 100644 index 0000000..3d0a89c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &675548327 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 675548329} + - component: {fileID: 675548330} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &675548329 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 675548327} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &675548330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 675548327} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!1 &903576102 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 903576105} + - component: {fileID: 903576104} + - component: {fileID: 903576103} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &903576103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 903576102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eabf5f06c048be84cbc8226659385e1f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &903576104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 903576102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Model + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Model + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &903576105 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 903576102} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1110108826 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1110108829} + - component: {fileID: 1110108828} + - component: {fileID: 1110108827} + 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 &1110108827 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1110108826} + m_Enabled: 1 +--- !u!20 &1110108828 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1110108826} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 1073741791 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1110108829 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1110108826} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2137835166 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 2137835169} + - component: {fileID: 2137835168} + - component: {fileID: 2137835167} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2137835167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2137835166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &2137835168 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2137835166} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2137835169 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 2137835166} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity.meta new file mode 100644 index 0000000..ec81e09 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 17 - Model.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 729de84eb637f4f4f9ac755b3914d8fc +timeCreated: 1456390922 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity new file mode 100644 index 0000000..58d3a6e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity @@ -0,0 +1,447 @@ +%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.37311924, g: 0.38073963, b: 0.3587269, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: df16360bf5632475ea9ac4b3fea8f011, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &109839784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 109839787} + - component: {fileID: 109839786} + - component: {fileID: 109839785} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &109839785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 109839784} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &109839786 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 109839784} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &109839787 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 109839784} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9.105556, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &223106906 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 223106908} + - component: {fileID: 223106907} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &223106907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 223106906} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &223106908 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 223106906} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &950943749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 950943754} + - component: {fileID: 950943753} + - component: {fileID: 950943750} + 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 &950943750 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950943749} + m_Enabled: 1 +--- !u!20 &950943753 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950943749} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 536869343 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &950943754 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950943749} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -5.773, y: 3.109, z: -6.169} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1798063796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1798063799} + - component: {fileID: 1798063798} + - component: {fileID: 1798063797} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1798063797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1798063796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 917e86e515017db488b38e836ed52634, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1798063798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1798063796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Guide + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Guide + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1798063799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1798063796} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 223106908} + - {fileID: 1798063799} + - {fileID: 950943754} + - {fileID: 109839787} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity.meta new file mode 100644 index 0000000..6471160 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 18 - Guide.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 085f754b1b575534b91305d7c18a92a4 +timeCreated: 1456392160 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity new file mode 100644 index 0000000..f41896a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity @@ -0,0 +1,648 @@ +%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.44657844, g: 0.49641222, b: 0.57481676, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: c080f2192574c41de884825dba7dbd84, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &340315424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 340315427} + - component: {fileID: 340315426} + - component: {fileID: 340315425} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &340315425 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 340315424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &340315426 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 340315424} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &340315427 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 340315424} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9.105556, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &568737677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 568737679} + - component: {fileID: 568737678} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &568737678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 568737677} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &568737679 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 568737677} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &995477573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 995477578} + - component: {fileID: 995477577} + - component: {fileID: 995477574} + 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 &995477574 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995477573} + m_Enabled: 1 +--- !u!20 &995477577 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995477573} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 536869343 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &995477578 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995477573} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 250, y: 1.8, z: 300} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1799657441 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1799657444} + - component: {fileID: 1799657443} + - component: {fileID: 1799657442} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1799657442 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799657441} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 12542fe68a883624ea477c953ae0cf52, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &1799657443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799657441} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: HitTest + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/HitTest + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1799657444 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799657441} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1867794689 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1867794693} + - component: {fileID: 1867794692} + - component: {fileID: 1867794691} + - component: {fileID: 1867794690} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1867794690 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867794689} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &1867794691 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867794689} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &1867794692 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867794689} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1867794693 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867794689} + serializedVersion: 2 + m_LocalRotation: {x: -0.15300491, y: -0.16397955, z: 0.025648758, w: 0.9741881} + m_LocalPosition: {x: 252.602, y: 1.958, z: 306.869} + m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1958141061 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1958141063} + - component: {fileID: 1958141062} + 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 &1958141062 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958141061} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + 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_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1958141063 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958141061} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.109381676, w: 0.87542605} + m_LocalPosition: {x: 11.367566, y: -7.7512474, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 568737679} + - {fileID: 1799657444} + - {fileID: 995477578} + - {fileID: 1867794693} + - {fileID: 340315427} + - {fileID: 1958141063} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity.meta new file mode 100644 index 0000000..3ca7e05 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 19 - HitTest.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf0fd7d55aa59c44a92b1e6248258bfe +timeCreated: 1456392929 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity new file mode 100644 index 0000000..b114ca1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity @@ -0,0 +1,581 @@ +%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.44745964, g: 0.4974082, b: 0.5752875, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: c5c5377ab53e742a5ae680f5a50952f4, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &204995357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 204995359} + - component: {fileID: 204995358} + m_Layer: 0 + m_Name: UIPanel1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &204995358 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 204995357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Perspective + componentName: Panel + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/Perspective + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 650, y: 260} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &204995359 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 204995357} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.34202018, z: 0, w: 0.9396926} + m_LocalPosition: {x: 250.07, y: 4.8, z: 313.9} + m_LocalScale: {x: 0.014347202, y: 0.014347202, z: 0.014347202} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &568737677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 568737679} + - component: {fileID: 568737678} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &568737678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 568737677} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ccbee12c33459e546bf698dc4ca46bea, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &568737679 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 568737677} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &820935328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 820935331} + - component: {fileID: 820935330} + - component: {fileID: 820935329} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &820935329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820935328} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &820935330 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820935328} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &820935331 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820935328} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.888889, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &979631918 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 979631919} + - component: {fileID: 979631920} + m_Layer: 0 + m_Name: UIPanel2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &979631919 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979631918} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0.3459605, z: 0, w: 0.9382491} + m_LocalPosition: {x: 239.64, y: 9, z: 313.24} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &979631920 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979631918} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Perspective + componentName: Panel2 + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/Perspective + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 442, y: 601} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!1 &995477573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 995477578} + - component: {fileID: 995477577} + - component: {fileID: 995477574} + 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 &995477574 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995477573} + m_Enabled: 1 +--- !u!20 &995477577 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995477573} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21176471, g: 0.23137255, b: 0.2627451, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &995477578 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995477573} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 250, y: 1.8, z: 300} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1434776251 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1434776253} + - component: {fileID: 1434776252} + 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 &1434776252 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1434776251} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + 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_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294965503 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1434776253 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1434776251} + serializedVersion: 2 + m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} + m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 568737679} + - {fileID: 1434776253} + - {fileID: 995477578} + - {fileID: 204995359} + - {fileID: 979631919} + - {fileID: 820935331} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity.meta new file mode 100644 index 0000000..3b487eb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 20 - 3D UI.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4bc350cbb6a15d40a15aef7979eaa5e +timeCreated: 1456411647 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity new file mode 100644 index 0000000..2d37ac2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity @@ -0,0 +1,426 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &298758265 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 298758267} + - component: {fileID: 298758266} + 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 &298758266 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 298758265} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + 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 &298758267 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 298758265} + 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 &681395388 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 681395393} + - component: {fileID: 681395392} + - component: {fileID: 681395389} + 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 &681395389 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 681395388} + m_Enabled: 1 +--- !u!20 &681395392 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 681395388} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.6102941, g: 0.6102941, b: 0.6102941, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 65 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073741023 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &681395393 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 681395388} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 250, y: 8, 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 &681573944 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 100000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + m_PrefabInternal: {fileID: 1973186790} + serializedVersion: 5 + m_Component: + - component: {fileID: 681573949} + - component: {fileID: 681573948} + - component: {fileID: 681573947} + - component: {fileID: 681573946} + - component: {fileID: 681573945} + - component: {fileID: 681573950} + m_Layer: 0 + m_Name: aomian + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &681573945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 681573944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2ca66c39de4dce2499306801170a139f, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Curve + componentName: Main + sortingOrder: 0 + packagePath: UI/Curve + renderCamera: {fileID: 0} + fairyBatching: 0 + touchDisabled: 0 +--- !u!64 &681573946 +MeshCollider: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 681573944} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Convex: 0 + m_InflateMesh: 0 + m_SkinWidth: 0.01 + m_Mesh: {fileID: 4300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} +--- !u!23 &681573947 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 2300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, + type: 3} + m_PrefabInternal: {fileID: 1973186790} + m_GameObject: {fileID: 681573944} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: ec52002c32d42344f96be9a0561d52f8, 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_StitchLightmapSeams: 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 &681573948 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 3300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, + type: 3} + m_PrefabInternal: {fileID: 1973186790} + m_GameObject: {fileID: 681573944} + m_Mesh: {fileID: 4300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} +--- !u!4 &681573949 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + m_PrefabInternal: {fileID: 1973186790} + m_GameObject: {fileID: 681573944} + m_LocalRotation: {x: 0, y: 1, z: 0, w: -0.00000016292068} + m_LocalPosition: {x: 250, y: 8, z: 10} + m_LocalScale: {x: 1.3, y: 1.3, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &681573950 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 681573944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d30b14c0ce756e2428ef9db93b692b69, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1973186790 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_LocalPosition.x + value: 250 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_LocalPosition.y + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_LocalPosition.z + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_LocalRotation.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_LocalRotation.w + value: -1.62920685e-07 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_LocalScale.x + value: 1.29999995 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_LocalScale.y + value: 1.29999995 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: ec52002c32d42344f96be9a0561d52f8, type: 2} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 442eade8c078c3e4ca12a9990b30a6b3, type: 3} + m_RootGameObject: {fileID: 681573944} + m_IsPrefabParent: 0 diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity.meta new file mode 100644 index 0000000..0e8477c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 21 - Curve UI.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 537f052b9bcb3274ca109d206e7b1f71 +timeCreated: 1461431245 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity new file mode 100644 index 0000000..a571eec --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity @@ -0,0 +1,515 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &38190412 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 38190415} + - component: {fileID: 38190414} + - component: {fileID: 38190413} + m_Layer: 0 + m_Name: Globe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &38190413 +MeshRenderer: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 38190412} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_Materials: + - {fileID: 2100000, guid: aa9cae01e1843384686010036f374ee2, 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_StitchLightmapSeams: 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 &38190414 +MeshFilter: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 38190412} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &38190415 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 38190412} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -8} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &401163756 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 401163759} + - component: {fileID: 401163758} + - component: {fileID: 401163757} + 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 &401163757 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 401163756} + m_Enabled: 1 +--- !u!20 &401163758 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 401163756} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0.019607844} + 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: 536870879 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &401163759 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 401163756} + 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: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &495606784 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 495606787} + - component: {fileID: 495606786} + - component: {fileID: 495606785} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &495606785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 495606784} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &495606786 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 495606784} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &495606787 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 495606784} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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 &531468966 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 531468968} + - component: {fileID: 531468967} + 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 &531468967 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 531468966} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 2 + 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 &531468968 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 531468966} + 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 &1321678497 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1321678499} + - component: {fileID: 1321678498} + - component: {fileID: 1321678500} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1321678498 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1321678497} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Gesture + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Gesture + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1321678499 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1321678497} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1321678500 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1321678497} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dffc58029aa66074287bfe11db08a102, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1858196917 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1858196921} + - component: {fileID: 1858196918} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1858196918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1858196917} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &1858196921 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1858196917} + 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} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity.meta new file mode 100644 index 0000000..49d754f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 22 - Gesture.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 99d5d7fbdec0c8249885740dfe14ad8f +timeCreated: 1464336759 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity new file mode 100644 index 0000000..80e2923 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &479063064 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 479063067} + - component: {fileID: 479063066} + - component: {fileID: 479063065} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &479063065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 479063064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 78878c40447242843aa913ef50cce606, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &479063066 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 479063064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: Filter + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/Filter + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &479063067 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 479063064} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1140707663 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1140707667} + - component: {fileID: 1140707664} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1140707664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1140707663} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &1140707667 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1140707663} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1352869606 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1352869609} + - component: {fileID: 1352869608} + - component: {fileID: 1352869607} + 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 &1352869607 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1352869606} + m_Enabled: 1 +--- !u!20 &1352869608 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1352869606} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 536870879 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1352869609 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1352869606} + 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1679237723 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1679237726} + - component: {fileID: 1679237725} + - component: {fileID: 1679237724} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1679237724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1679237723} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1679237725 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1679237723} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1679237726 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1679237723} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity.meta new file mode 100644 index 0000000..c0c603e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 23 - Filter.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c7133508ce19e514ab0fb73a52a2cdf1 +timeCreated: 1465403020 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity new file mode 100644 index 0000000..d180a0e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &902009683 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 902009686} + - component: {fileID: 902009685} + - component: {fileID: 902009684} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &902009684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 902009683} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f30e9532e25d54e4789a3b737b33f79e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &902009685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 902009683} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: TurnCard + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/TurnCard + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &902009686 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 902009683} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1093699821 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1093699824} + - component: {fileID: 1093699823} + - component: {fileID: 1093699822} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1093699822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1093699821} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1093699823 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1093699821} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1093699824 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1093699821} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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 &1398533359 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1398533362} + - component: {fileID: 1398533361} + - component: {fileID: 1398533360} + 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 &1398533360 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398533359} + m_Enabled: 1 +--- !u!20 &1398533361 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398533359} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 536870879 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1398533362 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1398533359} + 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1894282122 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1894282126} + - component: {fileID: 1894282123} + m_Layer: 0 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1894282123 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1894282122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &1894282126 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1894282122} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity.meta new file mode 100644 index 0000000..18603d8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 24 - TurnCard.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0f565de6d6d7e64da7c0688e65d565d +timeCreated: 1465455953 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity new file mode 100644 index 0000000..f4edeb5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &581431957 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 581431961} + - component: {fileID: 581431958} + m_Layer: 5 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &581431958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 581431957} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &581431961 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 581431957} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &744711559 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 744711561} + - component: {fileID: 744711560} + - component: {fileID: 744711562} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &744711560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: TreeView + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/TreeView + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &744711561 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.008802817, y: 0.008802817, z: 0.008802817} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &744711562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a8846401629fd134dbc0abfb115b498b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1200630629 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1200630632} + - component: {fileID: 1200630631} + - component: {fileID: 1200630630} + 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 &1200630630 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 +--- !u!20 &1200630631 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 2684354527 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1200630632 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1777378358 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1777378361} + - component: {fileID: 1777378360} + - component: {fileID: 1777378359} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1777378359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1777378360 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1777378361 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.3351648, y: -5, 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/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity.meta new file mode 100644 index 0000000..60f7f19 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 25 - TreeView.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0bc596d82327941479fad22a23c339ee +timeCreated: 1466782562 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity new file mode 100644 index 0000000..3f24b2f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &959293110 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 959293113} + - component: {fileID: 959293112} + - component: {fileID: 959293111} + 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 &959293111 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 959293110} + m_Enabled: 1 +--- !u!20 &959293112 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 959293110} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 2684354527 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &959293113 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 959293110} + 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: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1299316600 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1299316604} + - component: {fileID: 1299316601} + m_Layer: 5 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1299316601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299316600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &1299316604 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1299316600} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1874263660 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1874263662} + - component: {fileID: 1874263661} + - component: {fileID: 1874263663} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1874263661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1874263660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: PullToRefresh + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/PullToRefresh + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &1874263662 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1874263660} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1874263663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1874263660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cc11ef8b3e553814d83688351418d0cf, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1991189706 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1991189709} + - component: {fileID: 1991189708} + - component: {fileID: 1991189707} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1991189707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1991189706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1991189708 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1991189706} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1991189709 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1991189706} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity.meta new file mode 100644 index 0000000..6198ce1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 26 - PullToRefresh.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc85150c2ddfaec43bcfa322713d27f8 +timeCreated: 1470303075 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity new file mode 100644 index 0000000..e485bdc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &581431957 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 581431961} + - component: {fileID: 581431958} + m_Layer: 5 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &581431958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 581431957} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 640 + designResolutionY: 960 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &581431961 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 581431957} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &744711559 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 744711561} + - component: {fileID: 744711560} + - component: {fileID: 744711562} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &744711560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: ScrollPane + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/ScrollPane + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &744711561 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &744711562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 33e449f584dc08845b990406509de039, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1200630629 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1200630632} + - component: {fileID: 1200630631} + - component: {fileID: 1200630630} + 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 &1200630630 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 +--- !u!20 &1200630631 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 2684354527 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1200630632 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1777378358 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1777378361} + - component: {fileID: 1777378360} + - component: {fileID: 1777378359} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1777378359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1777378360 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1777378361 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.889717, y: -5, 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/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity.meta new file mode 100644 index 0000000..ac3ce0d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 27 - ScrollPane.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 867859be40bfae045a2669a57b1e6601 +timeCreated: 1476970857 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity new file mode 100644 index 0000000..fc0b238 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &581431957 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 581431961} + - component: {fileID: 581431958} + m_Layer: 5 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &581431958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 581431957} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &581431961 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 581431957} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &744711559 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 744711561} + - component: {fileID: 744711560} + - component: {fileID: 744711562} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &744711560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: TypingEffect + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/TypingEffect + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &744711561 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &744711562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2686886b98b45764893ae635e5b76d89, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1200630629 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1200630632} + - component: {fileID: 1200630631} + - component: {fileID: 1200630630} + 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 &1200630630 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 +--- !u!20 &1200630631 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 2684354527 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1200630632 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1777378358 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1777378361} + - component: {fileID: 1777378360} + - component: {fileID: 1777378359} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1777378359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1777378360 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1777378361 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity.meta new file mode 100644 index 0000000..e2ea11f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 28 - TypingEffect.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e6a75b5a71cbe240b1cc2d14cdc5a3d +timeCreated: 1477472028 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity new file mode 100644 index 0000000..0a42694 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity @@ -0,0 +1,379 @@ +%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, g: 0, b: 0, a: 1} +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + 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: 9 + m_Resolution: 2 + m_BakeResolution: 40 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + 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: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !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 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &581431957 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 581431961} + - component: {fileID: 581431958} + m_Layer: 5 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &581431958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 581431957} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &581431961 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 581431957} + 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: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &744711559 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 744711561} + - component: {fileID: 744711560} + - component: {fileID: 744711562} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &744711560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: TurnPage + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/TurnPage + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &744711561 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &744711562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0246af0692f804e419764f96010083e0, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1200630629 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1200630632} + - component: {fileID: 1200630631} + - component: {fileID: 1200630630} + 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 &1200630630 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 +--- !u!20 &1200630631 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + 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: 536870879 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1200630632 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1200630629} + 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: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1777378358 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1777378361} + - component: {fileID: 1777378360} + - component: {fileID: 1777378359} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1777378359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1777378360 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1777378361 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.875, y: -5, 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/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity.meta new file mode 100644 index 0000000..45c5531 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 29 - TurnPage.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9258ae47c8374554f9c0e7d9b7e61df1 +timeCreated: 1547395694 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity new file mode 100644 index 0000000..bd101b0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity @@ -0,0 +1,510 @@ +%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.37311924, g: 0.38073963, b: 0.3587269, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 679030288} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &581431957 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 581431961} + - component: {fileID: 581431958} + m_Layer: 5 + m_Name: Example + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &581431958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581431957} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a723f7fd716aac049aa24e9186f18685, type: 3} + m_Name: + m_EditorClassIdentifier: + scaleMode: 1 + screenMatchMode: 0 + designResolutionX: 1136 + designResolutionY: 640 + fallbackScreenDPI: 96 + defaultSpriteDPI: 96 + constantScaleFactor: 1 + ignoreOrientation: 0 +--- !u!4 &581431961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581431957} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!850595691 &679030288 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 6 + m_GIWorkflowMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 0 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + 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: 1024 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 0 + 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 + m_NumRaysToShootPerTexel: -1 + m_RespectSceneVisibilityWhenBakingGI: 0 +--- !u!1 &744711559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 744711561} + - component: {fileID: 744711560} + - component: {fileID: 744711562} + m_Layer: 5 + m_Name: UIPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &744711560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: TextMeshPro + componentName: Main + fitScreen: 1 + sortingOrder: 0 + packagePath: UI/TextMeshPro + renderMode: 0 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 1 + touchDisabled: 0 + cachedUISize: {x: 1136, y: 640} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!4 &744711561 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744711559} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.015625, y: 0.015625, z: 0.015625} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &744711562 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744711559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 16519a7b1af254640a93412fae4bd9be, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1200630629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1200630632} + - component: {fileID: 1200630631} + - component: {fileID: 1200630630} + 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 &1200630630 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 +--- !u!20 &1200630631 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200630629} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.21215399, g: 0.23259084, b: 0.2647059, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 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: 2684354527 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1200630632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200630629} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1777378358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1777378361} + - component: {fileID: 1777378360} + - component: {fileID: 1777378359} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1777378359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &1777378360 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777378358} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1777378361 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777378358} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 8.888889, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 581431961} + - {fileID: 744711561} + - {fileID: 1777378361} + - {fileID: 1200630632} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity.meta new file mode 100644 index 0000000..bd1eacd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/Example 30 - TextMeshPro.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80c3912e6b42b40619898246e8b4ee26 +timeCreated: 1477472028 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity new file mode 100644 index 0000000..8c54451 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity @@ -0,0 +1,6757 @@ +%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.44745964, g: 0.4974082, b: 0.5752875, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: 8b5a15e521a7d4c84b477c4508d3e600, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &5036419 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5036420} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5036420 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5036419} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2079800125} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8244350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8244351} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8244351 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8244350} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 16865924} + m_Father: {fileID: 124523146} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &10342370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 10342371} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &10342371 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10342370} + serializedVersion: 2 + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 890592555} + m_Father: {fileID: 1660272298} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &16865923 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 16865924} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &16865924 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 16865923} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8244351} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &29972413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 29972414} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &29972414 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 29972413} + serializedVersion: 2 + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 382534005} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &33533795 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 33533796} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &33533796 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 33533795} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 196546666} + m_Father: {fileID: 388786820} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &46704612 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 46704613} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &46704613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 46704612} + serializedVersion: 2 + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 652247988} + - {fileID: 304956530} + - {fileID: 185726998} + m_Father: {fileID: 419218095} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &60996235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 60996236} + - component: {fileID: 60996237} + m_Layer: 0 + m_Name: HeadBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &60996236 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 60996235} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} + m_LocalPosition: {x: 0, y: 2.3, z: 0} + m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2079800125} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &60996237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 60996235} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: HeadBar + componentName: HeadBar + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/HeadBar + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 145, y: 106} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!1 &64498699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 64498700} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &64498700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 64498699} + serializedVersion: 2 + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 681416381} + m_Father: {fileID: 723111075} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &71067424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 71067425} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &71067425 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 71067424} + serializedVersion: 2 + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 581922888} + - {fileID: 1377559287} + - {fileID: 961039522} + - {fileID: 1101670942} + - {fileID: 105021824} + m_Father: {fileID: 1601170548} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &84785414 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 84785415} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &84785415 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84785414} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 269854298} + m_Father: {fileID: 723111075} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &99807783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 99807784} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &99807784 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99807783} + serializedVersion: 2 + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1100917135} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &105021823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 105021824} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &105021824 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105021823} + serializedVersion: 2 + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 540512983} + m_Father: {fileID: 71067425} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &124523145 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 124523146} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &124523146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124523145} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8244351} + m_Father: {fileID: 1377559287} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &124999956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 124999957} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &124999957 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124999956} + serializedVersion: 2 + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 311668860} + m_Father: {fileID: 1610934284} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &136935965 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 136935966} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &136935966 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 136935965} + serializedVersion: 2 + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1558064592} + m_Father: {fileID: 304956530} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &141835723 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 141835724} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &141835724 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 141835723} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1536537271} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &141837797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 141837798} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &141837798 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 141837797} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 310503870} + m_Father: {fileID: 640344375} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &178338294 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 178338295} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &178338295 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 178338294} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1403374041} + m_Father: {fileID: 540512983} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &182203586 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 182203587} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &182203587 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 182203586} + serializedVersion: 2 + m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1918447119} + m_Father: {fileID: 723111075} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &185726997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 185726998} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &185726998 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 185726997} + serializedVersion: 2 + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1391249524} + m_Father: {fileID: 46704613} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &196546665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 196546666} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &196546666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 196546665} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 33533796} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &200112765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 200112766} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &200112766 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200112765} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 562522279} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &201122037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 201122038} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &201122038 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 201122037} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1776529100} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &210188097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 210188098} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &210188098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 210188097} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1085792356} + m_Father: {fileID: 2090325103} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &265171338 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 265171339} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &265171339 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265171338} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 724892307} + m_Father: {fileID: 471461010} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &266676499 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 266676500} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &266676500 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266676499} + serializedVersion: 2 + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1040498778} + m_Father: {fileID: 886801879} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &269382426 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 269382427} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &269382427 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 269382426} + serializedVersion: 2 + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1575296827} + m_Father: {fileID: 1439776395} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &269854297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 269854298} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &269854298 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 269854297} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2066001520} + m_Father: {fileID: 84785415} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &281554412 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 281554413} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &281554413 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 281554412} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1541416887} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &283656532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 283656534} + - component: {fileID: 283656533} + 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 &283656533 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283656532} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1.6 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + 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_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294965503 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &283656534 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283656532} + serializedVersion: 2 + m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} + m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &296495358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 296495359} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &296495359 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 296495358} + serializedVersion: 2 + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1579824420} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &304956529 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 304956530} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &304956530 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 304956529} + serializedVersion: 2 + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 136935966} + m_Father: {fileID: 46704613} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &310503869 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 310503870} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &310503870 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 310503869} + serializedVersion: 2 + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2056506721} + m_Father: {fileID: 141837798} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &311668859 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 311668860} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &311668860 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 311668859} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 522174631} + m_Father: {fileID: 124999957} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &320279271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 320279272} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &320279272 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 320279271} + serializedVersion: 2 + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1735343271} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &362199494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 362199495} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &362199495 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 362199494} + serializedVersion: 2 + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1849938685} + m_Father: {fileID: 1660272298} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &362404530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 362404531} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &362404531 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 362404530} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1699059572} + m_Father: {fileID: 1918447119} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &371764069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 371764070} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &371764070 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371764069} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 472469749} + m_Father: {fileID: 1994621439} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &382534004 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 382534005} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &382534005 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 382534004} + serializedVersion: 2 + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 29972414} + m_Father: {fileID: 1622701630} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &388786819 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 388786820} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &388786820 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 388786819} + serializedVersion: 2 + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 33533796} + m_Father: {fileID: 961039522} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &389821416 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 389821417} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &389821417 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 389821416} + serializedVersion: 2 + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1118303294} + m_Father: {fileID: 449647728} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &404196632 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 404196633} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &404196633 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404196632} + serializedVersion: 2 + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 471461010} + - {fileID: 688154556} + - {fileID: 1668246616} + m_Father: {fileID: 764294705} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &408504071 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 408504072} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &408504072 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 408504071} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1695770105} + m_Father: {fileID: 854551342} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &419218094 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 419218095} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &419218095 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 419218094} + serializedVersion: 2 + m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 46704613} + m_Father: {fileID: 1063386138} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &433657617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 433657618} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &433657618 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 433657617} + serializedVersion: 2 + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 640344375} + m_Father: {fileID: 1960716673} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &449647727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 449647728} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &449647728 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449647727} + serializedVersion: 2 + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1063386138} + - {fileID: 389821417} + - {fileID: 1692720590} + - {fileID: 1841998838} + - {fileID: 1979202748} + m_Father: {fileID: 1100917135} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &452112782 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 452112783} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &452112783 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 452112782} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1340922722} + m_Father: {fileID: 1063554055} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &471461009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 471461010} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &471461010 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471461009} + serializedVersion: 2 + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 265171339} + m_Father: {fileID: 404196633} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &472469748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 472469749} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &472469749 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472469748} + serializedVersion: 2 + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1209350543} + m_Father: {fileID: 371764070} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &484426596 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 484426597} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &484426597 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 484426596} + serializedVersion: 2 + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2059191264} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &496251865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 496251870} + - component: {fileID: 496251869} + - component: {fileID: 496251866} + 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 &496251866 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496251865} + m_Enabled: 1 +--- !u!20 &496251869 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496251865} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 58.5 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &496251870 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 496251865} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 250, y: 1.8, z: 300} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &516850680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 516850681} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &516850681 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 516850680} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1379554746} + m_Father: {fileID: 581922888} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &522174630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 522174631} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &522174631 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 522174630} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 311668860} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &540512982 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 540512983} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &540512983 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 540512982} + serializedVersion: 2 + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 178338295} + m_Father: {fileID: 105021824} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &562522278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 562522279} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &562522279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 562522278} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 200112766} + m_Father: {fileID: 1849938685} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &563181349 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 563181350} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &563181350 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 563181349} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1935173623} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &581922887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 581922888} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &581922888 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581922887} + serializedVersion: 2 + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 516850681} + m_Father: {fileID: 71067425} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &597323086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 597323087} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &597323087 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 597323086} + serializedVersion: 2 + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1366695883} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &612473350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 612473353} + - component: {fileID: 612473352} + - component: {fileID: 612473351} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &612473351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 612473350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &612473352 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 612473350} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &612473353 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 612473350} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7.5321693, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &623410476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 623410477} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &623410477 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 623410476} + serializedVersion: 2 + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1654971423} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &625686888 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 625686889} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &625686889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 625686888} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2079800125} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &640344374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 640344375} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &640344375 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 640344374} + serializedVersion: 2 + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 141837798} + m_Father: {fileID: 433657618} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &646268139 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 646268140} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &646268140 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646268139} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1437107419} + m_Father: {fileID: 1040498778} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &652247987 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 652247988} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &652247988 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 652247987} + serializedVersion: 2 + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1883865716} + m_Father: {fileID: 46704613} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &671199785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 671199786} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &671199786 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671199785} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2146512411} + m_Father: {fileID: 1057800475} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &681416380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 681416381} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &681416381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 681416380} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 767644321} + m_Father: {fileID: 64498700} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &688154555 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 688154556} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &688154556 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 688154555} + serializedVersion: 2 + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1610934284} + m_Father: {fileID: 404196633} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &696351200 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 696351201} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &696351201 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696351200} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 767644321} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &700233631 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 700233632} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &700233632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700233631} + serializedVersion: 2 + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1749708711} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &723111074 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 723111075} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &723111075 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723111074} + serializedVersion: 2 + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 878120660} + - {fileID: 1072575093} + - {fileID: 182203587} + - {fileID: 64498700} + - {fileID: 84785415} + m_Father: {fileID: 1558064592} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &724892306 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 724892307} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &724892307 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 724892306} + serializedVersion: 2 + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2049875416} + m_Father: {fileID: 265171339} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &764294704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 764294705} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &764294705 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764294704} + serializedVersion: 2 + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 404196633} + - {fileID: 1004345614} + - {fileID: 824471989} + - {fileID: 1909629311} + - {fileID: 1485252299} + m_Father: {fileID: 1960716673} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &767644320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 767644321} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &767644321 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 767644320} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 696351201} + m_Father: {fileID: 681416381} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &790087695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 790087696} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &790087696 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 790087695} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 816475217} + m_Father: {fileID: 1816919435} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &805521474 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 805521475} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &805521475 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 805521474} + serializedVersion: 2 + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1654971423} + m_Father: {fileID: 1004345614} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &812822684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 812822685} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &812822685 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 812822684} + serializedVersion: 2 + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1676684126} + m_Father: {fileID: 1063386138} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &816475216 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 816475217} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &816475217 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816475216} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 790087696} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &824471988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 824471989} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &824471989 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824471988} + serializedVersion: 2 + m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1622701630} + m_Father: {fileID: 764294705} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &835608755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 835608758} + - component: {fileID: 835608757} + - component: {fileID: 835608756} + m_Layer: 0 + m_Name: Terrain + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!154 &835608756 +TerrainCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835608755} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_TerrainData: {fileID: 15600000, guid: 82e50d0f43b868748b87d9050400e11a, type: 2} + m_EnableTreeColliders: 1 +--- !u!218 &835608757 +Terrain: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835608755} + m_Enabled: 1 + serializedVersion: 6 + m_TerrainData: {fileID: 15600000, guid: 82e50d0f43b868748b87d9050400e11a, type: 2} + m_TreeDistance: 5000 + m_TreeBillboardDistance: 50 + m_TreeCrossFadeLength: 5 + m_TreeMaximumFullLODCount: 50 + m_DetailObjectDistance: 80 + m_DetailObjectDensity: 1 + m_HeightmapPixelError: 5 + m_SplatMapDistance: 1000 + m_HeightmapMaximumLOD: 0 + m_ShadowCastingMode: 2 + m_DrawHeightmap: 1 + m_DrawInstanced: 0 + m_DrawTreesAndFoliage: 1 + m_StaticShadowCaster: 0 + m_IgnoreQualitySettings: 0 + m_ReflectionProbeUsage: 1 + m_MaterialTemplate: {fileID: 10652, guid: 0000000000000000f000000000000000, type: 0} + m_BakeLightProbesForTrees: 1 + m_PreserveTreePrototypeLayers: 0 + m_DeringLightProbesForTrees: 1 + m_ReceiveGI: 1 + m_ScaleInLightmap: 0.0512 + m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0} + m_GroupingID: 0 + m_RenderingLayerMask: 1 + m_AllowAutoConnect: 0 + m_EnableHeightmapRayTracing: 1 + m_EnableTreesAndDetailsRayTracing: 0 + m_TreeMotionVectorModeOverride: 3 +--- !u!4 &835608758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835608755} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &839143940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 839143941} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &839143941 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 839143940} + serializedVersion: 2 + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1091565651} + m_Father: {fileID: 952781891} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &841096869 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 841096870} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &841096870 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 841096869} + serializedVersion: 2 + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1994728501} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &854551341 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 854551342} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &854551342 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 854551341} + serializedVersion: 2 + m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 408504072} + m_Father: {fileID: 886801879} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &859168846 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 859168847} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &859168847 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859168846} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1552450422} + m_Father: {fileID: 1807796255} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &878120659 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 878120660} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &878120660 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 878120659} + serializedVersion: 2 + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1816919435} + m_Father: {fileID: 723111075} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &886801878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 886801879} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &886801879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886801878} + serializedVersion: 2 + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 266676500} + - {fileID: 1807796255} + - {fileID: 854551342} + - {fileID: 1759515010} + - {fileID: 1047911623} + m_Father: {fileID: 1416540639} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &890592554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 890592555} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &890592555 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890592554} + serializedVersion: 2 + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1935173623} + m_Father: {fileID: 10342371} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &893931755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 893931756} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &893931756 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893931755} + serializedVersion: 2 + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1493358181} + m_Father: {fileID: 1660272298} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &904349544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 904349545} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &904349545 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 904349544} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2049875416} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &920497110 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 920497111} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &920497111 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 920497110} + serializedVersion: 2 + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1275721354} + m_Father: {fileID: 1287402386} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &939129881 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 939129882} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &939129882 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 939129881} + serializedVersion: 2 + m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2083958133} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &952781890 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 952781891} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &952781891 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952781890} + serializedVersion: 2 + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 839143941} + m_Father: {fileID: 1409439575} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &956014011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 956014012} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &956014012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 956014011} + serializedVersion: 2 + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2085661087} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &961039521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 961039522} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &961039522 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961039521} + serializedVersion: 2 + m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 388786820} + m_Father: {fileID: 71067425} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1004345613 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1004345614} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1004345614 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004345613} + serializedVersion: 2 + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 805521475} + m_Father: {fileID: 764294705} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1037583218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1037583219} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1037583219 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1037583218} + serializedVersion: 2 + m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1063554055} + m_Father: {fileID: 1660272298} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1040498777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1040498778} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1040498778 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1040498777} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 646268140} + m_Father: {fileID: 266676500} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1047911622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1047911623} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1047911623 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1047911622} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2041486138} + m_Father: {fileID: 886801879} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1057800474 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1057800475} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1057800475 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057800474} + serializedVersion: 2 + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 671199786} + m_Father: {fileID: 1676684126} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1063386137 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1063386138} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1063386138 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1063386137} + serializedVersion: 2 + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2090325103} + - {fileID: 812822685} + - {fileID: 419218095} + m_Father: {fileID: 449647728} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1063554054 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1063554055} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1063554055 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1063554054} + serializedVersion: 2 + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 452112783} + m_Father: {fileID: 1037583219} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1072575092 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1072575093} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1072575093 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072575092} + serializedVersion: 2 + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1104598794} + m_Father: {fileID: 723111075} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1080709910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1080709911} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1080709911 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080709910} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1749708711} + m_Father: {fileID: 1101670942} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1085792355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1085792356} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1085792356 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085792355} + serializedVersion: 2 + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1887606359} + m_Father: {fileID: 210188098} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1091565650 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1091565651} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1091565651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091565650} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1660272298} + m_Father: {fileID: 839143941} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1100917134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1100917135} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1100917135 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100917134} + serializedVersion: 2 + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 99807784} + - {fileID: 449647728} + - {fileID: 1439776395} + m_Father: {fileID: 1536537271} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1101670941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1101670942} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1101670942 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101670941} + serializedVersion: 2 + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1080709911} + m_Father: {fileID: 71067425} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1104598793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1104598794} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1104598794 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1104598793} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1994728501} + m_Father: {fileID: 1072575093} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1118303293 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1118303294} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1118303294 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1118303293} + serializedVersion: 2 + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1483089920} + m_Father: {fileID: 389821417} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1209350542 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1209350543} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1209350543 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209350542} + serializedVersion: 2 + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 472469749} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1275721353 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1275721354} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1275721354 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1275721353} + serializedVersion: 2 + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 920497111} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1286947837 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1286947838} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1286947838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1286947837} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1776529100} + m_Father: {fileID: 1759515010} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1287402385 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1287402386} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1287402386 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287402385} + serializedVersion: 2 + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 920497111} + m_Father: {fileID: 1909629311} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1326549445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1326549446} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1326549446 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1326549445} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1887606359} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1340922721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1340922722} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1340922722 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1340922721} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 452112783} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1366695882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1366695883} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1366695883 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1366695882} + serializedVersion: 2 + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 597323087} + m_Father: {fileID: 1493363724} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1377559286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1377559287} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1377559287 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377559286} + serializedVersion: 2 + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 124523146} + m_Father: {fileID: 71067425} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1379554745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1379554746} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1379554746 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1379554745} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1582896583} + m_Father: {fileID: 516850681} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1381831530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1381831531} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1381831531 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381831530} + serializedVersion: 2 + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1416540639} + m_Father: {fileID: 2090313843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1391249523 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1391249524} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1391249524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1391249523} + serializedVersion: 2 + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1601170548} + m_Father: {fileID: 185726998} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1392945909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1392945910} + - component: {fileID: 1392945911} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1392945910 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392945909} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1536537271} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &1392945911 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1392945909} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 3 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 419218095} + - {fileID: 1063386138} + - {fileID: 185726998} + - {fileID: 652247988} + - {fileID: 304956530} + - {fileID: 812822685} + - {fileID: 449647728} + - {fileID: 2090325103} + - {fileID: 1391249524} + - {fileID: 136935966} + - {fileID: 389821417} + - {fileID: 1692720590} + - {fileID: 1841998838} + - {fileID: 2020153047} + - {fileID: 1979202748} + - {fileID: 1493363724} + - {fileID: 1747274113} + - {fileID: 46704613} + - {fileID: 1558064592} + - {fileID: 1118303294} + - {fileID: 1903010123} + - {fileID: 1483089920} + - {fileID: 723111075} + - {fileID: 878120660} + - {fileID: 1816919435} + - {fileID: 64498700} + - {fileID: 84785415} + - {fileID: 681416381} + - {fileID: 269854298} + - {fileID: 182203587} + - {fileID: 1918447119} + - {fileID: 1072575093} + - {fileID: 1104598794} + - {fileID: 790087696} + - {fileID: 1994728501} + - {fileID: 362404531} + - {fileID: 767644321} + - {fileID: 2066001520} + - {fileID: 1584622593} + - {fileID: 1887606359} + - {fileID: 1085792356} + - {fileID: 210188098} + - {fileID: 1563877873} + - {fileID: 1366695883} + - {fileID: 597323087} + - {fileID: 1601170548} + - {fileID: 71067425} + - {fileID: 581922888} + - {fileID: 516850681} + - {fileID: 1101670942} + - {fileID: 105021824} + - {fileID: 1080709911} + - {fileID: 540512983} + - {fileID: 961039522} + - {fileID: 388786820} + - {fileID: 1379554746} + - {fileID: 1377559287} + - {fileID: 124523146} + - {fileID: 33533796} + - {fileID: 8244351} + - {fileID: 1749708711} + - {fileID: 178338295} + - {fileID: 1057800475} + - {fileID: 671199786} + - {fileID: 1676684126} + - {fileID: 1439776395} + - {fileID: 2059191264} + - {fileID: 484426597} + - {fileID: 269382427} + - {fileID: 1575296827} + - {fileID: 2083958133} + - {fileID: 939129882} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 449647728} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} + m_DirtyAABB: 0 +--- !u!1 &1403374040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1403374041} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1403374041 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403374040} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 178338295} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1409439574 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1409439575} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1409439575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1409439574} + serializedVersion: 2 + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1735343271} + - {fileID: 2090313843} + - {fileID: 952781891} + m_Father: {fileID: 1668246616} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1416540638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1416540639} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1416540639 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1416540638} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 886801879} + m_Father: {fileID: 1381831531} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1437107418 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1437107419} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1437107419 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437107418} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 646268140} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1439776394 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1439776395} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1439776395 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439776394} + serializedVersion: 2 + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 269382427} + m_Father: {fileID: 1100917135} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1483089919 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1483089920} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1483089920 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483089919} + serializedVersion: 2 + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1563877873} + m_Father: {fileID: 1118303294} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1485252298 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1485252299} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1485252299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1485252298} + serializedVersion: 2 + m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2119835651} + m_Father: {fileID: 764294705} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1493358180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1493358181} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1493358181 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1493358180} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2085661087} + m_Father: {fileID: 893931756} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1493363723 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1493363724} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1493363724 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1493363723} + serializedVersion: 2 + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1366695883} + m_Father: {fileID: 1692720590} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1536537270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1536537271} + - component: {fileID: 1536537272} + m_Layer: 0 + m_Name: npc2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1536537271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536537270} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} + m_LocalPosition: {x: 252, y: 0, z: 306} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1392945910} + - {fileID: 141835724} + - {fileID: 1100917135} + - {fileID: 2029917184} + - {fileID: 1969043988} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!111 &1536537272 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536537270} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!1 &1541416886 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1541416887} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1541416887 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1541416886} + serializedVersion: 2 + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 281554413} + m_Father: {fileID: 2119835651} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1552450421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1552450422} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1552450422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1552450421} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1847474416} + m_Father: {fileID: 859168847} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1558064591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1558064592} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1558064592 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558064591} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 723111075} + m_Father: {fileID: 136935966} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1563877872 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1563877873} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1563877873 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1563877872} + serializedVersion: 2 + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1483089920} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1564631249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1564631250} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1564631250 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1564631249} + serializedVersion: 2 + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2066001520} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1575296826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1575296827} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1575296827 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1575296826} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2083958133} + m_Father: {fileID: 269382427} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1579824419 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1579824420} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1579824420 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579824419} + serializedVersion: 2 + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 296495359} + m_Father: {fileID: 2041486138} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1582896582 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1582896583} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1582896583 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582896582} + serializedVersion: 2 + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1379554746} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1584622592 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1584622593} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1584622593 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1584622592} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1903010123} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1601170547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1601170548} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1601170548 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1601170547} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 71067425} + m_Father: {fileID: 1391249524} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1610934283 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1610934284} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1610934284 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1610934283} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 124999957} + m_Father: {fileID: 688154556} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1622701629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1622701630} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1622701630 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1622701629} + serializedVersion: 2 + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 382534005} + m_Father: {fileID: 824471989} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1654971422 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1654971423} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1654971423 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1654971422} + serializedVersion: 2 + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 623410477} + m_Father: {fileID: 805521475} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1660272297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1660272298} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1660272298 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1660272297} + serializedVersion: 2 + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 893931756} + - {fileID: 362199495} + - {fileID: 1037583219} + - {fileID: 1994621439} + - {fileID: 10342371} + m_Father: {fileID: 1091565651} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1668246615 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1668246616} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1668246616 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1668246615} + serializedVersion: 2 + m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1409439575} + m_Father: {fileID: 404196633} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1676684125 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1676684126} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1676684126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1676684125} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1057800475} + m_Father: {fileID: 812822685} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1692720589 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1692720590} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1692720590 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1692720589} + serializedVersion: 2 + m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1493363724} + m_Father: {fileID: 449647728} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1695770104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1695770105} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1695770105 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695770104} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2051479725} + m_Father: {fileID: 408504072} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1699059571 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1699059572} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1699059572 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1699059571} + serializedVersion: 2 + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 362404531} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1735343270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1735343271} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1735343271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1735343270} + serializedVersion: 2 + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 320279272} + m_Father: {fileID: 1409439575} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1747274112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1747274113} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1747274113 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1747274112} + serializedVersion: 2 + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2059191264} + m_Father: {fileID: 1841998838} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1749708710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1749708711} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1749708711 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1749708710} + serializedVersion: 2 + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 700233632} + m_Father: {fileID: 1080709911} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1759515009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1759515010} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1759515010 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1759515009} + serializedVersion: 2 + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1286947838} + m_Father: {fileID: 886801879} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1776529099 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1776529100} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1776529100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1776529099} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 201122038} + m_Father: {fileID: 1286947838} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1807796254 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1807796255} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1807796255 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1807796254} + serializedVersion: 2 + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 859168847} + m_Father: {fileID: 886801879} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1816919434 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1816919435} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1816919435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1816919434} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 790087696} + m_Father: {fileID: 878120660} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1841998837 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1841998838} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1841998838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841998837} + serializedVersion: 2 + m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1747274113} + m_Father: {fileID: 449647728} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1847474415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1847474416} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1847474416 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847474415} + serializedVersion: 2 + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1552450422} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1849938684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1849938685} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1849938685 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1849938684} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 562522279} + m_Father: {fileID: 362199495} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1883865715 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1883865716} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1883865716 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1883865715} + serializedVersion: 2 + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 652247988} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1887606358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1887606359} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1887606359 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887606358} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1326549446} + m_Father: {fileID: 1085792356} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1903010122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1903010123} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1903010123 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1903010122} + serializedVersion: 2 + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1584622593} + m_Father: {fileID: 2020153047} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1909629310 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1909629311} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1909629311 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1909629310} + serializedVersion: 2 + m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1287402386} + m_Father: {fileID: 764294705} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1918447118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1918447119} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1918447119 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1918447118} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 362404531} + m_Father: {fileID: 182203587} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1935173622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1935173623} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1935173623 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1935173622} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 563181350} + m_Father: {fileID: 890592555} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1960716672 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1960716673} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1960716673 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1960716672} + serializedVersion: 2 + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2030544095} + - {fileID: 764294705} + - {fileID: 433657618} + m_Father: {fileID: 2079800125} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1969043987 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1969043988} + - component: {fileID: 1969043989} + m_Layer: 0 + m_Name: HeadBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1969043988 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1969043987} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} + m_LocalPosition: {x: 0, y: 2.3, z: 0} + m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1536537271} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1969043989 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1969043987} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: HeadBar + componentName: HeadBar + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/HeadBar + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 145, y: 106} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!1 &1979202747 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1979202748} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1979202748 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1979202747} + serializedVersion: 2 + m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2020153047} + m_Father: {fileID: 449647728} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1994621438 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1994621439} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1994621439 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994621438} + serializedVersion: 2 + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 371764070} + m_Father: {fileID: 1660272298} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1994728500 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1994728501} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1994728501 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1994728500} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 841096870} + m_Father: {fileID: 1104598794} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2020153046 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2020153047} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2020153047 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2020153046} + serializedVersion: 2 + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1903010123} + m_Father: {fileID: 1979202748} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2029917183 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2029917184} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2029917184 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2029917183} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1536537271} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2030544094 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2030544095} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2030544095 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030544094} + serializedVersion: 2 + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1960716673} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2041486137 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2041486138} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2041486138 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041486137} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1579824420} + m_Father: {fileID: 1047911623} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2049875415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2049875416} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2049875416 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2049875415} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 904349545} + m_Father: {fileID: 724892307} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2051479724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2051479725} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2051479725 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2051479724} + serializedVersion: 2 + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1695770105} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2056506720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2056506721} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2056506721 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2056506720} + serializedVersion: 2 + m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 310503870} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2059191263 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2059191264} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2059191264 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059191263} + serializedVersion: 2 + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 484426597} + m_Father: {fileID: 1747274113} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2066001519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2066001520} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2066001520 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2066001519} + serializedVersion: 2 + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1564631250} + m_Father: {fileID: 269854298} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2079800124 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2079800125} + - component: {fileID: 2079800126} + m_Layer: 0 + m_Name: npc1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2079800125 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2079800124} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7970782, z: 0, w: 0.60387623} + m_LocalPosition: {x: 250, y: 0, z: 305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2091424559} + - {fileID: 5036420} + - {fileID: 1960716673} + - {fileID: 625686889} + - {fileID: 60996236} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!111 &2079800126 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2079800124} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!1 &2083958132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2083958133} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2083958133 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2083958132} + serializedVersion: 2 + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 939129882} + m_Father: {fileID: 1575296827} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2085661086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2085661087} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2085661087 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2085661086} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 956014012} + m_Father: {fileID: 1493358181} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2090313842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2090313843} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2090313843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2090313842} + serializedVersion: 2 + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1381831531} + m_Father: {fileID: 1409439575} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2090325102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2090325103} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2090325103 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2090325102} + serializedVersion: 2 + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 210188098} + m_Father: {fileID: 1063386138} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2091424558 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2091424559} + - component: {fileID: 2091424560} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2091424559 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091424558} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2079800125} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &2091424560 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091424558} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 3 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 1668246616} + - {fileID: 404196633} + - {fileID: 952781891} + - {fileID: 1735343271} + - {fileID: 2090313843} + - {fileID: 688154556} + - {fileID: 764294705} + - {fileID: 471461010} + - {fileID: 839143941} + - {fileID: 1381831531} + - {fileID: 1004345614} + - {fileID: 824471989} + - {fileID: 1909629311} + - {fileID: 2119835651} + - {fileID: 1485252299} + - {fileID: 1622701630} + - {fileID: 1287402386} + - {fileID: 1409439575} + - {fileID: 1416540639} + - {fileID: 805521475} + - {fileID: 1541416887} + - {fileID: 1654971423} + - {fileID: 886801879} + - {fileID: 266676500} + - {fileID: 1040498778} + - {fileID: 1759515010} + - {fileID: 1047911623} + - {fileID: 1286947838} + - {fileID: 2041486138} + - {fileID: 854551342} + - {fileID: 408504072} + - {fileID: 1807796255} + - {fileID: 859168847} + - {fileID: 646268140} + - {fileID: 1552450422} + - {fileID: 1695770105} + - {fileID: 1776529100} + - {fileID: 1579824420} + - {fileID: 281554413} + - {fileID: 2049875416} + - {fileID: 724892307} + - {fileID: 265171339} + - {fileID: 623410477} + - {fileID: 382534005} + - {fileID: 29972414} + - {fileID: 1091565651} + - {fileID: 1660272298} + - {fileID: 893931756} + - {fileID: 1493358181} + - {fileID: 1994621439} + - {fileID: 10342371} + - {fileID: 371764070} + - {fileID: 890592555} + - {fileID: 1037583219} + - {fileID: 1063554055} + - {fileID: 2085661087} + - {fileID: 362199495} + - {fileID: 1849938685} + - {fileID: 452112783} + - {fileID: 562522279} + - {fileID: 472469749} + - {fileID: 1935173623} + - {fileID: 124999957} + - {fileID: 311668860} + - {fileID: 1610934284} + - {fileID: 433657618} + - {fileID: 920497111} + - {fileID: 1275721354} + - {fileID: 640344375} + - {fileID: 141837798} + - {fileID: 310503870} + - {fileID: 2056506721} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 764294705} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} + m_DirtyAABB: 0 +--- !u!1 &2119835650 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2119835651} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2119835651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119835650} + serializedVersion: 2 + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1541416887} + m_Father: {fileID: 1485252299} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2146512410 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2146512411} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2146512411 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2146512410} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 671199786} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 283656534} + - {fileID: 2079800125} + - {fileID: 1536537271} + - {fileID: 496251870} + - {fileID: 835608758} + - {fileID: 612473353} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity.meta new file mode 100644 index 0000000..45dd5f6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/scene1.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6940e9cae0b012148b4848f1c72c314a +timeCreated: 1446629259 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity b/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity new file mode 100644 index 0000000..99640df --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity @@ -0,0 +1,3633 @@ +%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.44745964, g: 0.4974082, b: 0.5752875, 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: 0 + 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: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + 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: 4890085278179872738, guid: 50e14c8ab7287483884436c4d85a8b88, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &15108207 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 15108208} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &15108208 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15108207} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000015237337, y: -7.0242384e-10, z: -0.2584564, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: -0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1276711109} + m_Father: {fileID: 1270272204} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &38393142 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 38393143} + m_Layer: 0 + m_Name: BoneU1NPC0040_05 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &38393143 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 38393142} + serializedVersion: 2 + m_LocalRotation: {x: -0.00046600957, y: -0.0051898602, z: -0.03497946, w: 0.99937445} + m_LocalPosition: {x: -0.3437608, y: -0.000000030267984, z: 0.000000016156454} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1055505314} + m_Father: {fileID: 1236509726} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &50436171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 50436172} + m_Layer: 0 + m_Name: BoneU1NPC0040_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &50436172 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 50436171} + serializedVersion: 2 + m_LocalRotation: {x: -0.0011492033, y: 0.11547007, z: -0.022049185, w: 0.99306554} + m_LocalPosition: {x: -0.21944422, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 146033428} + m_Father: {fileID: 568012397} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &56372223 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 56372224} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &56372224 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 56372223} + serializedVersion: 2 + m_LocalRotation: {x: -4.3348594e-10, y: -0.0000000018115013, z: -0.232726, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1249745429} + m_Father: {fileID: 1126435719} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &65522053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 65522054} + - component: {fileID: 65522055} + m_Layer: 0 + m_Name: U1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &65522054 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65522053} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 183723516} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &65522055 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 65522053} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 3 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f610d32095a9f6f48b1ada37f0b76da2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Bones: + - {fileID: 1332128444} + - {fileID: 1627784586} + - {fileID: 101316489} + - {fileID: 1638205040} + - {fileID: 1612671940} + - {fileID: 893508721} + - {fileID: 2110957757} + - {fileID: 380881373} + - {fileID: 1958496163} + - {fileID: 1898038932} + - {fileID: 2022197835} + - {fileID: 1236509726} + - {fileID: 551206772} + - {fileID: 1690705630} + - {fileID: 1566393274} + - {fileID: 38393143} + - {fileID: 1899411947} + - {fileID: 886260541} + - {fileID: 1763339584} + - {fileID: 568012397} + - {fileID: 1718624333} + - {fileID: 50436172} + - {fileID: 1303055814} + - {fileID: 229874027} + - {fileID: 1266631015} + - {fileID: 1044781005} + - {fileID: 1783049931} + - {fileID: 1270272204} + - {fileID: 1126435719} + - {fileID: 1615562991} + - {fileID: 1768862463} + - {fileID: 408660465} + - {fileID: 375531438} + - {fileID: 246022164} + - {fileID: 1201261629} + - {fileID: 881011152} + - {fileID: 15108208} + - {fileID: 56372224} + - {fileID: 781901569} + - {fileID: 1011722394} + - {fileID: 1253581289} + - {fileID: 384836653} + - {fileID: 146033428} + - {fileID: 1055505314} + - {fileID: 1719008872} + - {fileID: 2106303110} + - {fileID: 2001438911} + - {fileID: 1957960954} + - {fileID: 1379388956} + - {fileID: 795697302} + - {fileID: 833038440} + - {fileID: 2143453734} + - {fileID: 1548476278} + - {fileID: 1564743254} + - {fileID: 1421624883} + - {fileID: 542731910} + - {fileID: 2041868843} + - {fileID: 1627072381} + - {fileID: 483292745} + - {fileID: 1050763595} + - {fileID: 422349262} + - {fileID: 1986527229} + - {fileID: 1638789809} + - {fileID: 1091579117} + - {fileID: 951537747} + - {fileID: 1353184211} + - {fileID: 1974196522} + - {fileID: 1712308676} + - {fileID: 1713518042} + - {fileID: 149774030} + - {fileID: 491581709} + - {fileID: 995291859} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 2110957757} + m_AABB: + m_Center: {x: 0.070777535, y: -0.17806454, z: -0.060549498} + m_Extent: {x: 1.1843659, y: 0.54110307, z: 0.69386226} + m_DirtyAABB: 0 +--- !u!1 &79565531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 79565532} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &79565532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 79565531} + serializedVersion: 2 + m_LocalRotation: {x: -5.893526e-10, y: 0.0000000018626454, z: 1, w: 5.8207666e-10} + m_LocalPosition: {x: -0.024943382, y: 0, z: -0.000000007450581} + m_LocalScale: {x: -0.99999994, y: -0.99999994, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 422349262} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &101316488 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 101316489} + m_Layer: 0 + m_Name: BipU1NPC0040 R Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &101316489 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 101316488} + serializedVersion: 2 + m_LocalRotation: {x: 0.5098419, y: 0.09415194, z: 0.84582764, w: -0.12558776} + m_LocalPosition: {x: 0.15751553, y: 0.047174096, z: -0.12810928} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1958496163} + m_Father: {fileID: 886260541} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &146033427 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 146033428} + m_Layer: 0 + m_Name: BoneU1NPC0040_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &146033428 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 146033427} + serializedVersion: 2 + m_LocalRotation: {x: -0.00058261526, y: 0.08435822, z: -0.002398492, w: 0.9964324} + m_LocalPosition: {x: -0.26972228, y: 0.000000067055225, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 50436172} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &149774029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 149774030} + m_Layer: 0 + m_Name: BoneU1NPC0040_17 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &149774030 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 149774029} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.0030083237, w: 0.99999547} + m_LocalPosition: {x: -0.1393038, y: 0.00000011920929, z: 0.0000000074387287} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 491581709} + m_Father: {fileID: 1713518042} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &183723515 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 183723516} + - component: {fileID: 183723517} + m_Layer: 0 + m_Name: npc1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &183723516 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 183723515} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7291566, z: 0, w: 0.68434685} + m_LocalPosition: {x: 250, y: 0, z: 305} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 65522054} + - {fileID: 710289621} + - {fileID: 1730598360} + - {fileID: 253452406} + - {fileID: 1681726023} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!111 &183723517 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 183723515} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_Animations: + - {fileID: 7400000, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + - {fileID: 7400002, guid: c91085c40a67a7542b3b1a737e2a9c51, type: 3} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 1 +--- !u!1 &229874026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 229874027} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &229874027 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 229874026} + serializedVersion: 2 + m_LocalRotation: {x: 0.54707086, y: -0.33679026, z: 0.025234139, w: 0.7659302} + m_LocalPosition: {x: -0.04548961, y: 0.032626092, z: -0.048238248} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1266631015} + m_Father: {fileID: 1303055814} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &246022163 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 246022164} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &246022164 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 246022163} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000045672306, y: -0.000000006966301, z: -0.11640217, + w: 0.9932022} + m_LocalPosition: {x: -0.046686232, y: 0, z: -0.000000044703484} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1989016381} + m_Father: {fileID: 1266631015} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &251485423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 251485424} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &251485424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 251485423} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000014900833, y: 9.124129e-25, z: 1, w: 6.123234e-17} + m_LocalPosition: {x: -0.09715246, y: 5.820766e-11, z: 0} + m_LocalScale: {x: -0.9999999, y: -0.99999994, z: -0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1011722394} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &253452405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 253452406} + m_Layer: 0 + m_Name: Particle View 01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &253452406 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 253452405} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 183723516} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &375531437 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 375531438} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &375531438 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375531437} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019704107, y: 0.00000001654307, z: -0.33828908, w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0.000000029802322, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1201261629} + m_Father: {fileID: 408660465} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &380881372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 380881373} + m_Layer: 0 + m_Name: BipU1NPC0040 L Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &380881373 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380881372} + serializedVersion: 2 + m_LocalRotation: {x: 0.07005521, y: 0.9949544, z: 0.019194074, w: 0.06920745} + m_LocalPosition: {x: 0.15424526, y: 0.0077537824, z: 0.14184622} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 384836653} + m_Father: {fileID: 1627784586} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &384836652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 384836653} + m_Layer: 0 + m_Name: BipU1NPC0040 L Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &384836653 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 384836652} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000057649842, y: -0.000000003261023, z: 0.056475755, + w: 0.99840397} + m_LocalPosition: {x: -0.63113785, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1253581289} + m_Father: {fileID: 380881373} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &392747478 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 392747479} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &392747479 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 392747478} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000033527613, y: -0.000000022351742, z: 1, w: 0.000000014901161} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1050763595} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &408660464 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 408660465} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &408660465 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 408660464} + serializedVersion: 2 + m_LocalRotation: {x: 0.0059326943, y: -0.046875086, z: -0.13374056, w: 0.9898894} + m_LocalPosition: {x: -0.1342755, y: 0.010453641, z: -0.042716637} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 375531438} + m_Father: {fileID: 1303055814} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &422349261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 422349262} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger32 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &422349262 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 422349261} + serializedVersion: 2 + m_LocalRotation: {x: 9.838078e-11, y: 0.000000014781332, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.047542095, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 79565532} + m_Father: {fileID: 2143453734} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &483292744 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 483292745} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &483292745 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483292744} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000011518498, y: 1.7474848e-10, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000007450581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 511351800} + m_Father: {fileID: 1421624883} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &491581708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 491581709} + m_Layer: 0 + m_Name: BoneU1NPC0040_18 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &491581709 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 491581708} + serializedVersion: 2 + m_LocalRotation: {x: -0.00040025346, y: -0.01123328, z: -0.02950222, w: 0.9995015} + m_LocalPosition: {x: -0.09654796, y: 0, z: -0.00000008940697} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 995291859} + m_Father: {fileID: 149774030} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &511351799 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 511351800} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &511351800 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511351799} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000009313226, y: 0.000000007450581, z: 1, w: 1.3062128e-16} + m_LocalPosition: {x: -0.03385985, y: 0.000000059604645, z: 0} + m_LocalScale: {x: -1, y: -1, z: -1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 483292745} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &542731909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 542731910} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &542731910 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 542731909} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000036999668, y: -4.3363207e-10, z: -0.116402216, w: 0.9932022} + m_LocalPosition: {x: -0.046686172, y: 0.000000029802322, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1458321673} + m_Father: {fileID: 1379388956} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &551206771 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 551206772} + m_Layer: 0 + m_Name: BoneU1NPC0040_08 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &551206772 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 551206771} + serializedVersion: 2 + m_LocalRotation: {x: 0.14481032, y: 0.72324955, z: 0.67084324, w: -0.07687239} + m_LocalPosition: {x: -0.09436071, y: -0.04838095, z: -0.21734464} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1899411947} + m_Father: {fileID: 2110957757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &568012396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 568012397} + m_Layer: 0 + m_Name: BoneU1NPC0040_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &568012397 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 568012396} + serializedVersion: 2 + m_LocalRotation: {x: -0.0022492474, y: -0.069493994, z: 0.023477085, w: 0.99730355} + m_LocalPosition: {x: -0.36641824, y: -0.000000037252903, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 50436172} + m_Father: {fileID: 2022197835} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &710289620 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 710289621} + m_Layer: 0 + m_Name: Particle View 01 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &710289621 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 710289620} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 183723516} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &781901568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 781901569} + m_Layer: 0 + m_Name: BoneU1NPC0040_15 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &781901569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781901568} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003781554, y: 0.0044997092, z: 0.006417018, w: 0.99996924} + m_LocalPosition: {x: -0.13117108, y: 0.00000008940697, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1718624333} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &795697301 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 795697302} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &795697302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795697301} + serializedVersion: 2 + m_LocalRotation: {x: 0.059732042, y: -0.013540581, z: -0.37719768, w: 0.92410535} + m_LocalPosition: {x: -0.13256449, y: 0.01002568, z: -0.019996002} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2143453734} + m_Father: {fileID: 2001438911} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &833038439 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 833038440} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &833038440 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 833038439} + serializedVersion: 2 + m_LocalRotation: {x: 0.00036003545, y: 0.00016996996, z: -0.4269425, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016363978, z: -0.047929913} + m_LocalScale: {x: 1, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1548476278} + m_Father: {fileID: 2001438911} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &881011151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 881011152} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger22 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &881011152 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 881011151} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012812231, y: -0.0000000106490585, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: -0.000000029802322, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1574205442} + m_Father: {fileID: 1768862463} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &886260540 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 886260541} + m_Layer: 0 + m_Name: BipU1NPC0040 Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &886260541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886260540} + serializedVersion: 2 + m_LocalRotation: {x: 0.0026701908, y: 0.082502194, z: -0.15654624, w: 0.9842152} + m_LocalPosition: {x: -0.31072986, y: -0.11196074, z: 0.0000012554228} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1638205040} + - {fileID: 1612671940} + - {fileID: 101316489} + m_Father: {fileID: 1332128444} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &893508720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 893508721} + m_Layer: 0 + m_Name: BipU1NPC0040 R Thigh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &893508721 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893508720} + serializedVersion: 2 + m_LocalRotation: {x: 0.032485284, y: 0.98379385, z: -0.14521237, w: -0.10003901} + m_LocalPosition: {x: 0.15423739, y: 0.017576575, z: -0.14098525} + m_LocalScale: {x: 0.99999994, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 951537747} + m_Father: {fileID: 1627784586} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &951537746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 951537747} + m_Layer: 0 + m_Name: BipU1NPC0040 R Calf + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &951537747 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 951537746} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000031966128, y: -0.000000007692243, z: 0.069740504, + w: 0.9975652} + m_LocalPosition: {x: -0.6311379, y: 0.0000000037252903, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1638789809} + m_Father: {fileID: 893508721} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &995291858 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 995291859} + m_Layer: 0 + m_Name: BoneU1NPC0040_19 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &995291859 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995291858} + serializedVersion: 2 + m_LocalRotation: {x: -0.00030686983, y: -0.014894295, z: -0.012759084, w: 0.9998076} + m_LocalPosition: {x: -0.15022409, y: 0.00000011920929, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 491581709} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1011722393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1011722394} + m_Layer: 0 + m_Name: BipU1NPC0040 L Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1011722394 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011722393} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000001488408, y: -0.0000000061888934, z: -0.7071067, w: 0.7071068} + m_LocalPosition: {x: -0.15906768, y: 0.1518751, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 251485424} + m_Father: {fileID: 1253581289} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1044781004 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1044781005} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1044781005 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1044781004} + serializedVersion: 2 + m_LocalRotation: {x: -0.05973204, y: 0.0135405855, z: -0.37719765, w: 0.92410535} + m_LocalPosition: {x: -0.13256443, y: 0.01002568, z: 0.019995987} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1270272204} + m_Father: {fileID: 1303055814} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1050763594 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1050763595} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1050763595 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1050763594} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029137908, y: 0.000000056597667, z: -0.11640219, w: 0.9932022} + m_LocalPosition: {x: -0.038481772, y: 0.000000059604645, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 392747479} + m_Father: {fileID: 1627072381} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1055505313 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1055505314} + m_Layer: 0 + m_Name: BoneU1NPC0040_06 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1055505314 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1055505313} + serializedVersion: 2 + m_LocalRotation: {x: -0.004715289, y: -0.023372464, z: -0.029530805, w: 0.99927944} + m_LocalPosition: {x: -0.30401567, y: -0.00000011982048, z: 0.000000052912316} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1719008872} + m_Father: {fileID: 38393143} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1091579116 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1091579117} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1091579117 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091579116} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000016771352, y: -0.000000014137256, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: -0.15906769, y: 0.15187512, z: -0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1341468857} + m_Father: {fileID: 1638789809} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1126435718 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1126435719} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1126435719 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1126435718} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000010713893, y: 0.000000012758067, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.032068253, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 56372224} + m_Father: {fileID: 1783049931} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1201261628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1201261629} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1201261629 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1201261628} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000027865202, y: -0.00000001826892, z: -0.11640222, w: 0.99320215} + m_LocalPosition: {x: -0.03848183, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1876102361} + m_Father: {fileID: 375531438} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1236509725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1236509726} + m_Layer: 0 + m_Name: BoneU1NPC0040_04 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1236509726 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1236509725} + serializedVersion: 2 + m_LocalRotation: {x: -0.03435362, y: 0.6956146, z: 0.7068258, w: 0.123844504} + m_LocalPosition: {x: -0.09179708, y: -0.039010994, z: 0.22090554} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 38393143} + m_Father: {fileID: 2110957757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1249745428 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1249745429} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1249745429 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1249745428} + serializedVersion: 2 + m_LocalRotation: {x: -3.4694461e-18, y: 9.3132246e-10, z: 0.0000000037252899, w: 1} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 56372224} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1253581288 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1253581289} + m_Layer: 0 + m_Name: BipU1NPC0040 L Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1253581289 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1253581288} + serializedVersion: 2 + m_LocalRotation: {x: -0.056445796, y: 0.077959284, z: -0.12066044, w: 0.98801684} + m_LocalPosition: {x: -0.36886418, y: 0, z: -0.000000029802322} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1011722394} + m_Father: {fileID: 384836653} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1266631014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1266631015} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1266631015 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266631014} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000047073248, y: 0.000000006872411, z: -0.13648538, w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 246022164} + m_Father: {fileID: 229874027} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1270272203 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1270272204} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1270272204 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270272203} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000019256503, y: -0.0000000071974324, z: -0.2584564, + w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0, z: -0.000000014901161} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 15108208} + m_Father: {fileID: 1044781005} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1270295776 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1270295781} + - component: {fileID: 1270295780} + - component: {fileID: 1270295777} + 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 &1270295777 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270295776} + m_Enabled: 1 +--- !u!20 &1270295780 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270295776} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 300 + field of view: 58.5 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 1073740255 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1270295781 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1270295776} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 250, y: 1.8, z: 300} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1276711108 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1276711109} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger3Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1276711109 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276711108} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0.000000004190952, z: -0, w: 1} + m_LocalPosition: {x: -0.024943352, y: 0, z: 0.000000014901161} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 15108208} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1303055813 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1303055814} + m_Layer: 0 + m_Name: BipU1NPC0040 L Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1303055814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1303055813} + serializedVersion: 2 + m_LocalRotation: {x: -0.6349664, y: -0.02470889, z: 0.0011130363, w: 0.7721437} + m_LocalPosition: {x: -0.26442605, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 229874027} + - {fileID: 408660465} + - {fileID: 1615562991} + - {fileID: 1044781005} + - {fileID: 1783049931} + m_Father: {fileID: 1763339584} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1332128443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1332128444} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1332128444 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332128443} + serializedVersion: 2 + m_LocalRotation: {x: -0.027678795, y: 0.014816012, z: 0.039059028, w: 0.9987436} + m_LocalPosition: {x: -0.18444693, y: -0.00021146983, z: 0.000011495402} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 886260541} + m_Father: {fileID: 1627784586} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1341468856 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1341468857} + m_Layer: 0 + m_Name: BipU1NPC0040 R Toe0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1341468857 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1341468856} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -6.7314596e-14, z: -0, w: 1} + m_LocalPosition: {x: -0.09715249, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1091579117} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1353184210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1353184211} + m_Layer: 0 + m_Name: BipU1NPC0040 Prop1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1353184211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353184210} + serializedVersion: 2 + m_LocalRotation: {x: 0.9641265, y: 0.0000015549907, z: 0.000000021886642, w: 0.26544318} + m_LocalPosition: {x: 0.34783235, y: 0.45413256, z: 0.97688043} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1713518042} + m_Father: {fileID: 1730598360} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1379388955 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1379388956} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1379388956 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1379388955} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000003423077, y: -0.0000000028048297, z: -0.13648543, + w: 0.99064213} + m_LocalPosition: {x: -0.060612142, y: 0, z: 0} + m_LocalScale: {x: 0.9999998, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 542731910} + m_Father: {fileID: 1957960954} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1421624882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1421624883} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1421624883 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1421624882} + serializedVersion: 2 + m_LocalRotation: {x: 8.4858826e-10, y: 0.0000000036273518, z: -0.22779122, w: 0.97371} + m_LocalPosition: {x: -0.04489559, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 483292745} + m_Father: {fileID: 1564743254} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1444526371 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1444526374} + - component: {fileID: 1444526373} + - component: {fileID: 1444526372} + m_Layer: 0 + m_Name: Terrain + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!154 &1444526372 +TerrainCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1444526371} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_TerrainData: {fileID: 15600000, guid: 0a0d4f18f253a0149b2f98725610c8db, type: 2} + m_EnableTreeColliders: 1 +--- !u!218 &1444526373 +Terrain: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1444526371} + m_Enabled: 1 + serializedVersion: 6 + m_TerrainData: {fileID: 15600000, guid: 0a0d4f18f253a0149b2f98725610c8db, type: 2} + m_TreeDistance: 5000 + m_TreeBillboardDistance: 50 + m_TreeCrossFadeLength: 5 + m_TreeMaximumFullLODCount: 50 + m_DetailObjectDistance: 80 + m_DetailObjectDensity: 1 + m_HeightmapPixelError: 5 + m_SplatMapDistance: 1000 + m_HeightmapMaximumLOD: 0 + m_ShadowCastingMode: 2 + m_DrawHeightmap: 1 + m_DrawInstanced: 0 + m_DrawTreesAndFoliage: 1 + m_StaticShadowCaster: 0 + m_IgnoreQualitySettings: 0 + m_ReflectionProbeUsage: 1 + m_MaterialTemplate: {fileID: 10652, guid: 0000000000000000f000000000000000, type: 0} + m_BakeLightProbesForTrees: 1 + m_PreserveTreePrototypeLayers: 0 + m_DeringLightProbesForTrees: 1 + m_ReceiveGI: 1 + m_ScaleInLightmap: 0.0512 + m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0} + m_GroupingID: 0 + m_RenderingLayerMask: 1 + m_AllowAutoConnect: 0 + m_EnableHeightmapRayTracing: 1 + m_EnableTreesAndDetailsRayTracing: 0 + m_TreeMotionVectorModeOverride: 3 +--- !u!4 &1444526374 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1444526371} + serializedVersion: 2 + 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_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1458321672 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1458321673} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1458321673 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458321672} + serializedVersion: 2 + m_LocalRotation: {x: 9.7144535e-17, y: 0.000000026077036, z: 1, w: 0.0000000037252907} + m_LocalPosition: {x: -0.027513921, y: -0.000000007450581, z: -0.000000014901161} + m_LocalScale: {x: -0.99999994, y: -0.9999999, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 542731910} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1548476277 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1548476278} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger41 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1548476278 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548476277} + serializedVersion: 2 + m_LocalRotation: {x: -5.8860133e-10, y: 0.000000013547479, z: -0.23272598, w: 0.97254235} + m_LocalPosition: {x: -0.032068193, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1986527229} + m_Father: {fileID: 833038440} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1564743253 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1564743254} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1564743254 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1564743253} + serializedVersion: 2 + m_LocalRotation: {x: 0.07039445, y: 0.0111709675, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605344, y: 0.0072193146, z: 0.012832977} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1421624883} + m_Father: {fileID: 2001438911} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1566393273 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1566393274} + m_Layer: 0 + m_Name: BoneU1NPC0040_12 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1566393274 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566393273} + serializedVersion: 2 + m_LocalRotation: {x: -0.007047281, y: 0.71293783, z: -0.7009484, w: 0.01847366} + m_LocalPosition: {x: 0.037041347, y: 0.2043522, z: -0.00000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1690705630} + m_Father: {fileID: 2110957757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1574205441 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1574205442} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1574205442 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1574205441} + serializedVersion: 2 + m_LocalRotation: {x: -1.110223e-16, y: 0.000000007450581, z: 0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.03385985, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 881011152} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1612671939 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1612671940} + m_Layer: 0 + m_Name: BipU1NPC0040 L Clavicle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1612671940 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1612671939} + serializedVersion: 2 + m_LocalRotation: {x: 0.7185278, y: 0.10277511, z: -0.67755514, w: 0.11863456} + m_LocalPosition: {x: 0.10755098, y: 0.040875673, z: 0.17380889} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1898038932} + m_Father: {fileID: 886260541} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1615562990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1615562991} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1615562991 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615562990} + serializedVersion: 2 + m_LocalRotation: {x: -0.07039445, y: -0.011170962, z: -0.3130863, w: 0.94704634} + m_LocalPosition: {x: -0.13605338, y: 0.007219374, z: -0.012833029} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1768862463} + m_Father: {fileID: 1303055814} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1627072380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1627072381} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1627072381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627072380} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000011067006, y: -0.000000019773706, z: -0.33828908, + w: 0.94104224} + m_LocalPosition: {x: -0.03848189, y: 0, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1050763595} + m_Father: {fileID: 2041868843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1627784585 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1627784586} + m_Layer: 0 + m_Name: BipU1NPC0040 Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1627784586 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627784585} + serializedVersion: 2 + m_LocalRotation: {x: -0.01735794, y: -0.0000061976116, z: -0.00039807628, w: 0.99984926} + m_LocalPosition: {x: -0.15425146, y: -0.012549707, z: 0.0000053940257} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 380881373} + - {fileID: 893508721} + - {fileID: 1332128444} + m_Father: {fileID: 2110957757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1638205039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1638205040} + m_Layer: 0 + m_Name: BipU1NPC0040 Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1638205040 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1638205039} + serializedVersion: 2 + m_LocalRotation: {x: -0.19711412, y: -0.13914387, z: -0.03019048, w: 0.9699864} + m_LocalPosition: {x: -0.07696378, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2070960968} + m_Father: {fileID: 886260541} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1638789808 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1638789809} + m_Layer: 0 + m_Name: BipU1NPC0040 R Foot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1638789809 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1638789808} + serializedVersion: 2 + m_LocalRotation: {x: 0.12885731, y: -0.11456564, z: -0.07217499, w: 0.9823754} + m_LocalPosition: {x: -0.36886424, y: -0.000000018626451, z: 0.000000059604645} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1091579117} + m_Father: {fileID: 951537747} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1681726022 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1681726023} + - component: {fileID: 1681726024} + m_Layer: 0 + m_Name: HeadBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1681726023 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1681726022} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7881464, z: 0, w: -0.6154879} + m_LocalPosition: {x: 0, y: 2.3, z: 0} + m_LocalScale: {x: 0.00822643, y: 0.008226429, z: 0.008226429} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 183723516} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1681726024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1681726022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 024553ecf96a65649b929ee08c9214fd, type: 3} + m_Name: + m_EditorClassIdentifier: + packageName: HeadBar + componentName: HeadBar + fitScreen: 0 + sortingOrder: 0 + packagePath: UI/HeadBar + renderMode: 2 + renderCamera: {fileID: 0} + position: {x: 0, y: 0, z: 0} + scale: {x: 1, y: 1, z: 1} + rotation: {x: 0, y: 0, z: 0} + fairyBatching: 0 + touchDisabled: 0 + cachedUISize: {x: 145, y: 106} + hitTestMode: 0 + setNativeChildrenOrder: 0 +--- !u!1 &1690705629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1690705630} + m_Layer: 0 + m_Name: BoneU1NPC0040_13 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1690705630 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1690705629} + serializedVersion: 2 + m_LocalRotation: {x: -0.000015738498, y: -0.00013481079, z: -0.008859425, w: 0.9999608} + m_LocalPosition: {x: -0.31762934, y: -0.000000010933491, z: 0} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1718624333} + m_Father: {fileID: 1566393274} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1712308675 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1712308676} + m_Layer: 0 + m_Name: BoneU1NPC0040_11 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1712308676 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712308675} + serializedVersion: 2 + m_LocalRotation: {x: -0.000086798296, y: -0.020558871, z: 0.05031313, w: 0.99852186} + m_LocalPosition: {x: -0.22983328, y: -0.000000057336692, z: 0.000000014185389} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1974196522} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1713518041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1713518042} + m_Layer: 0 + m_Name: BoneU1NPC0040_16 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1713518042 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1713518041} + serializedVersion: 2 + m_LocalRotation: {x: 0.6767241, y: 0.17877202, z: -0.66455, w: -0.26164562} + m_LocalPosition: {x: -0.007154107, y: 0.007390216, z: -0.015515804} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 149774030} + m_Father: {fileID: 1353184211} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1718624332 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1718624333} + m_Layer: 0 + m_Name: BoneU1NPC0040_14 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1718624333 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1718624332} + serializedVersion: 2 + m_LocalRotation: {x: -0.0001523757, y: -0.003437277, z: 0.003043677, w: 0.99998945} + m_LocalPosition: {x: -0.27671933, y: 0.00000008568168, z: -0.00000008940697} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 781901569} + m_Father: {fileID: 1690705630} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1719008871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1719008872} + m_Layer: 0 + m_Name: BoneU1NPC0040_07 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1719008872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719008871} + serializedVersion: 2 + m_LocalRotation: {x: -0.00075227657, y: 0.0038103822, z: -0.05603769, w: 0.99842113} + m_LocalPosition: {x: -0.21202846, y: -0.00000000779994, z: 0.000000023244239} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1055505314} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1730598359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1730598360} + m_Layer: 0 + m_Name: BipU1NPC0040 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1730598360 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1730598359} + serializedVersion: 2 + m_LocalRotation: {x: -0.1919382, y: 0.68055844, z: 0.68055844, w: 0.1919382} + m_LocalPosition: {x: 0.000000044236277, y: 1.1308364, z: 0} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1873921414} + - {fileID: 2110957757} + - {fileID: 1353184211} + m_Father: {fileID: 183723516} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1739148838 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1739148839} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger4Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1739148839 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1739148838} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000059662852, y: -0.000000007450581, z: 1, w: 0.0000000016298142} + m_LocalPosition: {x: -0.022908807, y: -0.000000059604645, z: -0.000000014901161} + m_LocalScale: {x: -1, y: -1, z: -0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1986527229} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1755567097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1755567098} + - component: {fileID: 1755567099} + m_Layer: 0 + m_Name: Directional light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1755567098 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1755567097} + serializedVersion: 2 + m_LocalRotation: {x: 0.28999123, y: -0.381406, z: 0.8684553, w: 0.1273576} + m_LocalPosition: {x: -6.5506787, y: 11.864752, z: -8.71518} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &1755567099 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1755567097} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1.19 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + 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_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294965503 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &1763339583 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1763339584} + m_Layer: 0 + m_Name: BipU1NPC0040 L Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1763339584 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1763339583} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000013421596, y: 0.000000027632419, z: 0.20570025, w: 0.97861505} + m_LocalPosition: {x: -0.31676018, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1303055814} + m_Father: {fileID: 1898038932} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1768862462 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1768862463} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger21 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1768862463 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768862462} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000007254705, y: 0.0000000016971774, z: -0.2277913, w: 0.97371} + m_LocalPosition: {x: -0.04489553, y: 0, z: 0.000000029802322} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 881011152} + m_Father: {fileID: 1615562991} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1783049930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1783049931} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1783049931 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783049930} + serializedVersion: 2 + m_LocalRotation: {x: -0.0003600514, y: -0.00016999949, z: -0.42694253, w: 0.9042787} + m_LocalPosition: {x: -0.12844104, y: 0.016364038, z: 0.047929898} + m_LocalScale: {x: 1, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1126435719} + m_Father: {fileID: 1303055814} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1873921413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1873921414} + m_Layer: 0 + m_Name: BipU1NPC0040 Footsteps + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1873921414 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873921413} + serializedVersion: 2 + m_LocalRotation: {x: 1.5306408e-16, y: 0.000000011865041, z: 0.9624549, w: -0.2714416} + m_LocalPosition: {x: 0.000000007288584, y: -0.000000025843239, z: -1.1315333} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1730598360} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1876102360 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1876102361} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger1Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1876102361 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876102360} + serializedVersion: 2 + m_LocalRotation: {x: 1.110223e-16, y: 0.000000007450581, z: -0.000000014901161, + w: 1} + m_LocalPosition: {x: -0.029265404, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1201261629} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1898038931 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1898038932} + m_Layer: 0 + m_Name: BipU1NPC0040 L UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1898038932 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1898038931} + serializedVersion: 2 + m_LocalRotation: {x: 0.075374514, y: -0.5434655, z: -0.029676218, w: 0.8355138} + m_LocalPosition: {x: -0.13340384, y: 0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1763339584} + m_Father: {fileID: 1612671940} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1899411946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1899411947} + m_Layer: 0 + m_Name: BoneU1NPC0040_09 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1899411947 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899411946} + serializedVersion: 2 + m_LocalRotation: {x: -0.0036082768, y: -0.00875891, z: -0.031771034, w: 0.9994503} + m_LocalPosition: {x: -0.32947823, y: 3.4924597e-10, z: 0.000000024918226} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1974196522} + m_Father: {fileID: 551206772} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1957960953 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1957960954} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger0 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1957960954 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1957960953} + serializedVersion: 2 + m_LocalRotation: {x: -0.54707086, y: 0.33679026, z: 0.025234113, w: 0.7659302} + m_LocalPosition: {x: -0.04548955, y: 0.032626092, z: 0.04823824} + m_LocalScale: {x: 1, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1379388956} + m_Father: {fileID: 2001438911} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1958496162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1958496163} + m_Layer: 0 + m_Name: BipU1NPC0040 R UpperArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1958496163 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958496162} + serializedVersion: 2 + m_LocalRotation: {x: -0.10905765, y: 0.47591645, z: -0.10381737, w: 0.8665056} + m_LocalPosition: {x: -0.13340387, y: -0.000000014901161, z: 0.00000011920929} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2106303110} + m_Father: {fileID: 101316489} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1974196521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1974196522} + m_Layer: 0 + m_Name: BoneU1NPC0040_10 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1974196522 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1974196521} + serializedVersion: 2 + m_LocalRotation: {x: 0.0027269025, y: -0.009664864, z: 0.063321516, w: 0.9979427} + m_LocalPosition: {x: -0.31961066, y: -0.000000022439053, z: 0.000000024805498} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1712308676} + m_Father: {fileID: 1899411947} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1986527228 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1986527229} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger42 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1986527229 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1986527228} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000008472626, y: 0.000000019399199, z: -0.23272595, w: 0.97254235} + m_LocalPosition: {x: -0.027281523, y: -0.000000059604645, z: 0.000000014901161} + m_LocalScale: {x: 1, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1739148839} + m_Father: {fileID: 1548476278} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1989016380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1989016381} + m_Layer: 0 + m_Name: BipU1NPC0040 L Finger0Nub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1989016381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989016380} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000007450581, y: 0, z: -0, w: 1} + m_LocalPosition: {x: -0.02751398, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 246022164} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2001438910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2001438911} + m_Layer: 0 + m_Name: BipU1NPC0040 R Hand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2001438911 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2001438910} + serializedVersion: 2 + m_LocalRotation: {x: 0.6728588, y: -0.02292139, z: -0.042504072, w: 0.73819315} + m_LocalPosition: {x: -0.26442617, y: -0.000000029802322, z: 0} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1957960954} + - {fileID: 2041868843} + - {fileID: 1564743254} + - {fileID: 795697302} + - {fileID: 833038440} + m_Father: {fileID: 2106303110} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2022197834 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2022197835} + m_Layer: 0 + m_Name: BoneU1NPC0040_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2022197835 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2022197834} + serializedVersion: 2 + m_LocalRotation: {x: -0.09307013, y: -0.6939775, z: 0.70504564, w: 0.112445615} + m_LocalPosition: {x: -0.011476634, y: -0.25979847, z: 0.0000009536743} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 568012397} + m_Father: {fileID: 2110957757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2041868842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2041868843} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2041868843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2041868842} + serializedVersion: 2 + m_LocalRotation: {x: -0.0059327143, y: 0.0468751, z: -0.13374054, w: 0.9898894} + m_LocalPosition: {x: -0.13427556, y: 0.010453641, z: 0.042716667} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1627072381} + m_Father: {fileID: 2001438911} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2070960967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2070960968} + m_Layer: 0 + m_Name: BipU1NPC0040 HeadNub + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2070960968 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2070960967} + serializedVersion: 2 + m_LocalRotation: {x: 2.3283067e-10, y: -4.6566134e-10, z: 0.0000000074505815, w: 1} + m_LocalPosition: {x: -0.24115324, y: 0, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1638205040} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2091270998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2091271001} + - component: {fileID: 2091271000} + - component: {fileID: 2091270999} + m_Layer: 0 + m_Name: Stage Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2091270999 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091270998} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 367e80e3fa958344491a9a196a902b72, type: 3} + m_Name: + m_EditorClassIdentifier: + constantSize: 1 +--- !u!20 &2091271000 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091270998} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 3 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: -30 + far clip plane: 30 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2091271001 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2091270998} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7.5321693, y: -5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2106303109 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2106303110} + m_Layer: 0 + m_Name: BipU1NPC0040 R Forearm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2106303110 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2106303109} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000023453895, y: 0.0000000022419842, z: 0.22451864, w: 0.97446984} + m_LocalPosition: {x: -0.3167603, y: -0.000000029802322, z: 0.000000059604645} + m_LocalScale: {x: 0.9999999, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2001438911} + m_Father: {fileID: 1958496163} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2110957756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2110957757} + m_Layer: 0 + m_Name: BipU1NPC0040 Pelvis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2110957757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2110957756} + serializedVersion: 2 + m_LocalRotation: {x: -0.49999964, y: 0.50000036, z: 0.49999964, w: 0.50000036} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1627784586} + - {fileID: 2022197835} + - {fileID: 1236509726} + - {fileID: 551206772} + - {fileID: 1566393274} + m_Father: {fileID: 1730598360} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2143453733 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2143453734} + m_Layer: 0 + m_Name: BipU1NPC0040 R Finger31 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2143453734 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2143453733} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000012240386, y: 0.0000000025096, z: -0.25845632, w: 0.96602297} + m_LocalPosition: {x: -0.03848195, y: 0.000000029802322, z: 0.000000022351742} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 422349262} + m_Father: {fileID: 795697302} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1755567098} + - {fileID: 1270295781} + - {fileID: 183723516} + - {fileID: 1444526374} + - {fileID: 2091271001} diff --git a/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity.meta b/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity.meta new file mode 100644 index 0000000..ea2d5f4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Scenes/scene2.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44b386c5d0d35be45b1a3f0e55977f62 +timeCreated: 1446629280 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ScrollPane.meta b/Assets/Plugins/FairyGUI/Examples/ScrollPane.meta new file mode 100644 index 0000000..ab07c55 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/ScrollPane.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 988df54331278a444888cd30353fa8fb +folderAsset: yes +timeCreated: 1476976370 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs b/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs new file mode 100644 index 0000000..ee947d9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs @@ -0,0 +1,113 @@ +using UnityEngine; +using FairyGUI; + +public class ScrollPaneMain : MonoBehaviour +{ + GComponent _mainView; + GList _list; + + void Awake() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + } + + void Start() + { + _mainView = this.GetComponent().ui; + + _list = _mainView.GetChild("list").asList; + _list.itemRenderer = RenderListItem; + _list.SetVirtual(); + _list.numItems = 1000; + _list.onTouchBegin.Add(OnClickList); + + _mainView.GetChild("box").asCom.onDrop.Add(OnDrop); + + LongPressGesture gesture = new LongPressGesture(_list); + gesture.once = true; + gesture.trigger = 1f; + gesture.onAction.Add(OnLongPress); + } + + void RenderListItem(int index, GObject obj) + { + GButton item = obj.asButton; + item.title = "Item " + index; + item.scrollPane.posX = 0; //reset scroll pos + + //Be carefull, RenderListItem is calling repeatedly, dont call 'Add' here! + //请注意,RenderListItem是重复调用的,不要使用Add增加侦听! + item.GetChild("b0").onClick.Set(OnClickStick); + item.GetChild("b1").onClick.Set(OnClickDelete); + } + + void OnClickList(EventContext context) + { + //find out if there is an item in edit status + //查找是否有项目处于编辑状态 + int cnt = _list.numChildren; + for (int i = 0; i < cnt; i++) + { + GButton item = _list.GetChildAt(i).asButton; + if (item.scrollPane.posX != 0) + { + //Check if clicked on the button + if (item.GetChild("b0").asButton.IsAncestorOf(GRoot.inst.touchTarget) + || item.GetChild("b1").asButton.IsAncestorOf(GRoot.inst.touchTarget)) + { + return; + } + item.scrollPane.SetPosX(0, true); + //avoid scroll pane default behavior + //取消滚动面板可能发生的拉动。 + item.scrollPane.CancelDragging(); + _list.scrollPane.CancelDragging(); + break; + } + } + } + + void OnLongPress(EventContext context) + { + //find out which item is under finger + //逐层往上知道查到点击了那个item + GObject obj = GRoot.inst.touchTarget; + GObject p = obj.parent; + while (p != null) + { + if (p == _list) + break; + + p = p.parent; + } + + if (p == null) + return; + Debug.Log(obj.text); + DragDropManager.inst.StartDrag(obj, obj.icon, obj.text); + } + + void OnDrop(EventContext context) + { + _mainView.GetChild("txt").text = "Drop " + (string)context.data; + } + + void OnClickStick(EventContext context) + { + _mainView.GetChild("txt").text = "Stick " + (((GObject)context.sender).parent).text; + } + + void OnClickDelete(EventContext context) + { + _mainView.GetChild("txt").text = "Delete " + (((GObject)context.sender).parent).text; + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs.meta new file mode 100644 index 0000000..7d72193 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/ScrollPane/ScrollPaneMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 33e449f584dc08845b990406509de039 +timeCreated: 1476970858 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TextMeshPro.meta b/Assets/Plugins/FairyGUI/Examples/TextMeshPro.meta new file mode 100644 index 0000000..985c648 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TextMeshPro.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4ac09deb76ae42c8a3c62e19e2029f9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs b/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs new file mode 100644 index 0000000..b547d9b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs @@ -0,0 +1,9 @@ +using UnityEngine; +using FairyGUI; + +public class TextMeshProMain : MonoBehaviour +{ + void Awake() + { + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs.meta new file mode 100644 index 0000000..2bf4ff5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TextMeshPro/TextMeshProMain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16519a7b1af254640a93412fae4bd9be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Transition.meta b/Assets/Plugins/FairyGUI/Examples/Transition.meta new file mode 100644 index 0000000..55d1037 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Transition.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9df2e7826734a4f47b0f45e7b7f3d65b +folderAsset: yes +timeCreated: 1446571749 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs b/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs new file mode 100644 index 0000000..cd4fdf3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs @@ -0,0 +1,105 @@ +using UnityEngine; +using FairyGUI; + +public class TransitionMain : MonoBehaviour +{ + GComponent _mainView; + GGroup _btnGroup; + GComponent _g1; + GComponent _g2; + GComponent _g3; + GComponent _g4; + GComponent _g5; + GComponent _g6; + + float _startValue; + float _endValue; + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + _btnGroup = _mainView.GetChild("g0").asGroup; + + _g1 = UIPackage.CreateObject("Transition", "BOSS").asCom; + _g2 = UIPackage.CreateObject("Transition", "BOSS_SKILL").asCom; + _g3 = UIPackage.CreateObject("Transition", "TRAP").asCom; + + _g4 = UIPackage.CreateObject("Transition", "GoodHit").asCom; + _g5 = UIPackage.CreateObject("Transition", "PowerUp").asCom; + _g5.GetTransition("t0").SetHook("play_num_now", __playNum); + + _g6 = UIPackage.CreateObject("Transition", "PathDemo").asCom; + + _mainView.GetChild("btn0").onClick.Add(() => { __play(_g1); }); + _mainView.GetChild("btn1").onClick.Add(() => { __play(_g2); }); + _mainView.GetChild("btn2").onClick.Add(() => { __play(_g3); }); + _mainView.GetChild("btn3").onClick.Add(__play4); + _mainView.GetChild("btn4").onClick.Add(__play5); + _mainView.GetChild("btn5").onClick.Add(() => { __play(_g6); }); + } + + void __play(GComponent target) + { + _btnGroup.visible = false; + GRoot.inst.AddChild(target); + Transition t = target.GetTransition("t0"); + + t.Play(() => + { + _btnGroup.visible = true; + GRoot.inst.RemoveChild(target); + }); + } + + void __play4() + { + _btnGroup.visible = false; + _g4.x = GRoot.inst.width - _g4.width - 20; + _g4.y = 100; + GRoot.inst.AddChild(_g4); + Transition t = _g4.GetTransition("t0"); + t.Play(3, 0, () => + { + _btnGroup.visible = true; + GRoot.inst.RemoveChild(_g4); + }); + } + + void __play5() + { + _btnGroup.visible = false; + _g5.x = 20; + _g5.y = GRoot.inst.height - _g5.height - 100; + GRoot.inst.AddChild(_g5); + Transition t = _g5.GetTransition("t0"); + _startValue = 10000; + int add = UnityEngine.Random.Range(1000, 3000); + _endValue = _startValue + add; + _g5.GetChild("value").text = "" + _startValue; + _g5.GetChild("add_value").text = "" + add; + t.Play(() => + { + _btnGroup.visible = true; + GRoot.inst.RemoveChild(_g5); + }); + } + + void __playNum() + { + GTween.To(_startValue, _endValue, 0.3f).SetEase(EaseType.Linear) + .OnUpdate((GTweener tweener) => { _g5.GetChild("value").text = "" + Mathf.Floor(tweener.value.x); }); + + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs.meta new file mode 100644 index 0000000..3f5330a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/Transition/TransitionMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ab67b9a9f47fd3343b5aeb1333ea0527 +timeCreated: 1446571752 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TreeView.meta b/Assets/Plugins/FairyGUI/Examples/TreeView.meta new file mode 100644 index 0000000..d0c6596 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TreeView.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 75789bcea4b63b64eb37ccf5f091eec0 +folderAsset: yes +timeCreated: 1467555752 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs b/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs new file mode 100644 index 0000000..02959d9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs @@ -0,0 +1,92 @@ +using UnityEngine; +using FairyGUI; + +public class TreeViewMain : MonoBehaviour +{ + GComponent _mainView; + GTree _tree1; + GTree _tree2; + string _fileURL; + + void Awake() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + } + + void Start() + { + _mainView = this.GetComponent().ui; + + _fileURL = "ui://TreeView/file"; + + _tree1 = _mainView.GetChild("tree").asTree; + _tree1.onClickItem.Add(__clickNode); + _tree2 = _mainView.GetChild("tree2").asTree; + _tree2.onClickItem.Add(__clickNode); + _tree2.treeNodeRender = RenderTreeNode; + + GTreeNode topNode = new GTreeNode(true); + topNode.data = "I'm a top node"; + _tree2.rootNode.AddChild(topNode); + for (int i = 0; i < 5; i++) + { + GTreeNode node = new GTreeNode(false); + node.data = "Hello " + i; + topNode.AddChild(node); + } + + GTreeNode aFolderNode = new GTreeNode(true); + aFolderNode.data = "A folder node"; + topNode.AddChild(aFolderNode); + for (int i = 0; i < 5; i++) + { + GTreeNode node = new GTreeNode(false); + node.data = "Good " + i; + aFolderNode.AddChild(node); + } + + for (int i = 0; i < 3; i++) + { + GTreeNode node = new GTreeNode(false); + node.data = "World " + i; + topNode.AddChild(node); + } + + GTreeNode anotherTopNode = new GTreeNode(false); + anotherTopNode.data = new string[] { "I'm a top node too", "ui://TreeView/heart" }; + _tree2.rootNode.AddChild(anotherTopNode); + } + + void RenderTreeNode(GTreeNode node, GComponent obj) + { + if (node.isFolder) + { + obj.text = (string)node.data; + } + else if (node.data is string[]) + { + obj.icon = ((string[])node.data)[1]; + obj.text = ((string[])node.data)[0]; + } + else + { + obj.icon = _fileURL; + obj.text = (string)node.data; + } + } + + void __clickNode(EventContext context) + { + GTreeNode node = ((GObject)context.data).treeNode; + Debug.Log(node.text); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs.meta new file mode 100644 index 0000000..8ed092c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TreeView/TreeViewMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a8846401629fd134dbc0abfb115b498b +timeCreated: 1466782335 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard.meta b/Assets/Plugins/FairyGUI/Examples/TurnCard.meta new file mode 100644 index 0000000..657ad61 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnCard.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e7fb2d8438b95bb4594057499bfaf527 +folderAsset: yes +timeCreated: 1465459098 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs b/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs new file mode 100644 index 0000000..508a20b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs @@ -0,0 +1,73 @@ +using FairyGUI; + +public class Card : GButton +{ + GObject _back; + GObject _front; + + public override void ConstructFromXML(FairyGUI.Utils.XML xml) + { + base.ConstructFromXML(xml); + + _back = GetChild("n0"); + _front = GetChild("icon"); + _front.visible = false; + } + + public bool opened + { + get + { + return _front.visible; + } + + set + { + GTween.Kill(this); + + _front.visible = value; + _back.visible = !value; + } + } + + public void SetPerspective() + { + _front.displayObject.perspective = true; + _back.displayObject.perspective = true; + } + + public void Turn() + { + if (GTween.IsTweening(this)) + return; + + bool toOpen = !_front.visible; + GTween.To(0, 180, 0.8f).SetTarget(this).SetEase(EaseType.QuadOut).OnUpdate(TurnInTween).SetUserData(toOpen); + } + + void TurnInTween(GTweener tweener) + { + bool toOpen = (bool)tweener.userData; + float v = tweener.value.x; + if (toOpen) + { + _back.rotationY = v; + _front.rotationY = -180 + v; + if (v > 90) + { + _front.visible = true; + _back.visible = false; + } + } + else + { + _back.rotationY = -180 + v; + _front.rotationY = v; + if (v > 90) + { + _front.visible = false; + _back.visible = true; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs.meta new file mode 100644 index 0000000..6a2aa2e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnCard/Card.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f508880d965b60742b34521caee31d63 +timeCreated: 1465454889 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs b/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs new file mode 100644 index 0000000..6cba921 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using FairyGUI; + +public class TurnCardMain : MonoBehaviour +{ + GComponent _mainView; + Card _c0; + Card _c1; + + void Awake() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + UIPackage.AddPackage("UI/TurnCard"); + UIObjectFactory.SetPackageItemExtension("ui://TurnCard/CardComponent", typeof(Card)); + } + + void Start() + { + _mainView = this.GetComponent().ui; + + _c0 = (Card)_mainView.GetChild("c0"); + + _c1 = (Card)_mainView.GetChild("c1"); + _c1.SetPerspective(); + + _c0.onClick.Add(__clickCard); + _c1.onClick.Add(__clickCard); + } + + void __clickCard(EventContext context) + { + Card card = (Card)context.sender; + card.Turn(); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs.meta new file mode 100644 index 0000000..493cf51 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnCard/TurnCardMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f30e9532e25d54e4789a3b737b33f79e +timeCreated: 1465453409 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage.meta b/Assets/Plugins/FairyGUI/Examples/TurnPage.meta new file mode 100644 index 0000000..b9b72fc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnPage.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b583937d058c54d4b86d41aca1848f04 +folderAsset: yes +timeCreated: 1547288041 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs b/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs new file mode 100644 index 0000000..f975e84 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using FairyGUI; + +class BookPage : GComponent +{ + Controller _style; + GoWrapper _modelWrapper; + GObject _pageNumber; + + public override void ConstructFromXML(FairyGUI.Utils.XML xml) + { + base.ConstructFromXML(xml); + + _style = GetController("style"); + + _pageNumber = GetChild("pn"); + + _modelWrapper = new GoWrapper(); + GetChild("model").asGraph.SetNativeObject(_modelWrapper); + } + + public void render(int pageIndex) + { + _pageNumber.text = (pageIndex + 1).ToString(); + + if (pageIndex == 0) + _style.selectedIndex = 0; //pic page + else if (pageIndex == 2) + { + if (_modelWrapper.wrapTarget == null) + { + Object prefab = Resources.Load("Role/npc3"); + GameObject go = (GameObject)Object.Instantiate(prefab); + go.transform.localPosition = new Vector3(0, 0, 1000); + go.transform.localScale = new Vector3(120, 120, 120); + go.transform.localEulerAngles = new Vector3(0, 100, 0); + + _modelWrapper.SetWrapTarget(go, true); + } + + _style.selectedIndex = 2; //show a model + } + else + _style.selectedIndex = 1; //empty page + } +} diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs.meta new file mode 100644 index 0000000..da75661 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnPage/BookPage.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c00a31b8a6395734980ed760747cb0c4 +timeCreated: 1547975855 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs b/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs new file mode 100644 index 0000000..7bb6348 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs @@ -0,0 +1,1225 @@ +using System; +using FairyGUI; +using FairyGUI.Utils; +using UnityEngine; + +/// +/// Achieving the effect of turning over books. Use virtual mechanism to support unlimited pages. Support covers. +/// +public class FairyBook : GComponent +{ + /// + /// + /// + /// + /// + public delegate void PageRenderer(int index, GComponent page); + + /// + /// + /// + public PageRenderer pageRenderer; + + /// + /// + /// + public static float EffectDuration = 0.5f; + + /// + /// + /// + public enum Paper + { + Soft, + Hard + } + + public enum CoverType + { + Front, + Back + } + + enum CoverStatus + { + Hidden, + ShowingFront, + ShowingBack + } + + enum CoverTurningOp + { + None, + ShowFront, + HideFront, + ShowBack, + HideBack + } + + enum Corner + { + INVALID, + TL, + BL, + TR, + BR + } + + GComponent _pagesContainer; + string _pageResource; + int _pageWidth; + int _pageHeight; + + int _pageCount; + int _currentPage; + Paper _paper; + + int _turningTarget; + float _turningAmount; + CoverTurningOp _coverTurningOp; + GPath _turningPath; + + GComponent[] _objects; + GGraph _mask1; + GGraph _mask2; + GObject _softShadow; + int[] _objectIndice; + int[] _objectNewIndice; + + Corner _draggingCorner; + Vector2 _dragPoint; + float _touchDownTime; + + GComponent _frontCover; + GComponent _backCover; + Vector2 _frontCoverPos; + Vector2 _backCoverPos; + CoverStatus _coverStatus; + + EventListener _onTurnComplete; + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + _pagesContainer = GetChild("pages").asCom; + if (_pagesContainer == null) + { + Debug.LogError("Not a valid book resource"); + return; + } + + GComponent obj1 = _pagesContainer.GetChild("left").asCom; + GComponent obj2 = _pagesContainer.GetChild("right").asCom; + if (obj1 == null || obj2 == null || obj1.resourceURL != obj2.resourceURL + || obj1.width != obj2.width || obj2.x != obj1.x + obj1.width) + { + Debug.LogError("Not a valid book resource"); + return; + } + + obj1.displayObject.home = this.displayObject.cachedTransform; + obj2.displayObject.home = this.displayObject.cachedTransform; + _pagesContainer.RemoveChild(obj1); + _pagesContainer.RemoveChild(obj2); + + _frontCover = GetChild("frontCover") as GComponent; + if (_frontCover != null) + _frontCoverPos = _frontCover.position; + _backCover = GetChild("backCover") as GComponent; + if (_backCover != null) + _backCoverPos = _backCover.position; + + _objects = new GComponent[4] { obj1, obj2, null, null }; + _objectIndice = new int[4] { -1, -1, -1, -1 }; + _objectNewIndice = new int[4]; + _turningTarget = -1; + _currentPage = -1; + + _pageWidth = (int)obj1.width; + _pageHeight = (int)obj1.height; + _pageResource = obj1.resourceURL; + + _mask1 = new GGraph(); + _mask1.displayObject.home = this.displayObject.cachedTransform; + _mask1.SetSize(_pageWidth, _pageHeight); + + _mask2 = new GGraph(); + _mask2.displayObject.home = this.displayObject.cachedTransform; + _mask2.SetSize(_pageWidth, _pageHeight); + + SetupHotspot(GetChild("hotspot_tl"), Corner.TL); + SetupHotspot(GetChild("hotspot_bl"), Corner.BL); + SetupHotspot(GetChild("hotspot_tr"), Corner.TR); + SetupHotspot(GetChild("hotspot_br"), Corner.BR); + } + + public override void Dispose() + { + for (int i = 0; i < 4; i++) + { + if (_objects[i] != null) + _objects[i].Dispose(); + + } + _mask1.Dispose(); + _mask2.Dispose(); + if (_softShadow != null) + _softShadow.Dispose(); + + base.Dispose(); + } + + /// + /// + /// + public EventListener onTurnComplete + { + get { return _onTurnComplete ?? (_onTurnComplete = new EventListener(this, "onTurnComplete")); } + } + + /// + /// + /// + /// + public void SetSoftShadowResource(string res) + { + _softShadow = UIPackage.CreateObjectFromURL(res); + _softShadow.height = Mathf.Sqrt(Mathf.Pow(_pageWidth, 2) + Mathf.Pow(_pageHeight, 2)) + 60; + _softShadow.displayObject.home = this.displayObject.cachedTransform; + _softShadow.sortingOrder = int.MaxValue; + } + + /// + /// + /// + public Paper pageSoftness + { + get { return _paper; } + set { _paper = value; } + } + + /// + /// + /// + public int pageCount + { + get { return _pageCount; } + set + { + if (_pageCount % 2 != 0) + throw new System.Exception("Page count must be even!"); + + _pageCount = value; + } + } + + /// + /// + /// + public int currentPage + { + get { return _currentPage; } + set + { + if (value < 0 || value > _pageCount - 1) + throw new Exception("Page index out of bounds: " + value); + + if (_currentPage != value) + { + GTween.Kill(this, true); + + _currentPage = value; + _coverStatus = CoverStatus.Hidden; + + RenderPages(); + } + } + } + + /// + /// + /// + /// + public void TurnTo(int pageIndex) + { + if (pageIndex < 0 || pageIndex > _pageCount - 1) + throw new Exception("Page index out of bounds: " + pageIndex); + + GTween.Kill(this, true); + + if (_coverStatus == CoverStatus.ShowingFront) + { + _coverTurningOp = CoverTurningOp.HideFront; + _draggingCorner = Corner.BR; + } + else if (_coverStatus == CoverStatus.ShowingBack) + { + _coverTurningOp = CoverTurningOp.HideBack; + _draggingCorner = Corner.BL; + } + + int tt1 = _currentPage; + if (_currentPage % 2 == 0) + tt1--; + int tt2 = pageIndex; + if (pageIndex % 2 == 0) + tt2--; + if (tt1 == tt2) + { + _currentPage = pageIndex; + _turningTarget = -1; + } + else + { + _turningTarget = pageIndex; + if (_turningTarget < _currentPage) + _draggingCorner = Corner.BL; + else + _draggingCorner = Corner.BR; + } + + if (_draggingCorner == Corner.INVALID) + return; + + StartTween(); + } + + /// + /// + /// + public void TurnNext() + { + GTween.Kill(this, true); + + if (isCoverShowing(CoverType.Front)) + TurnTo(0); + else if (_currentPage == _pageCount - 1) + ShowCover(CoverType.Back, true); + else if (_currentPage % 2 == 0) + TurnTo(_currentPage + 1); + else + TurnTo(_currentPage + 2); + } + + /// + /// + /// + public void TurnPrevious() + { + GTween.Kill(this, true); + + if (isCoverShowing(CoverType.Back)) + TurnTo(_pageCount - 1); + else if (_currentPage == 0) + ShowCover(CoverType.Front, true); + else if (_currentPage % 2 == 0) + TurnTo(_currentPage - 2); + else + TurnTo(_currentPage - 1); + } + + /// + /// + /// + /// + /// + public void ShowCover(CoverType cover, bool turnEffect) + { + GTween.Kill(this, true); + + if (_frontCover == null) + return; + + if (turnEffect) + { + if (cover == CoverType.Front) + { + if (_coverStatus == CoverStatus.ShowingFront) + return; + + _coverTurningOp = CoverTurningOp.ShowFront; + _draggingCorner = Corner.BL; + _currentPage = 0; + } + else + { + if (_coverStatus == CoverStatus.ShowingBack) + return; + + _coverTurningOp = CoverTurningOp.ShowBack; + _draggingCorner = Corner.BR; + _currentPage = _pageCount - 1; + } + + StartTween(); + } + else + { + if (cover == CoverType.Front) + { + _currentPage = 0; + _coverStatus = CoverStatus.ShowingFront; + } + else + { + _currentPage = _pageCount - 1; + _coverStatus = CoverStatus.ShowingBack; + } + RenderPages(); + } + } + + /// + /// + /// + /// + /// + public bool isCoverShowing(CoverType cover) + { + return cover == CoverType.Front ? (_coverStatus == CoverStatus.ShowingFront) : (_coverStatus == CoverStatus.ShowingBack); + } + + void StartTween() + { + _turningAmount = 0; + RenderPages(); + Vector2 source = GetCornerPosition(_draggingCorner, _coverTurningOp != CoverTurningOp.None); + Vector2 target; + if (_draggingCorner == Corner.TL || _draggingCorner == Corner.BL) + target = GetCornerPosition(_draggingCorner + 2, _coverTurningOp != CoverTurningOp.None); + else + target = GetCornerPosition(_draggingCorner - 2, _coverTurningOp != CoverTurningOp.None); + + if (_turningPath == null) + _turningPath = new GPath(); + Vector2 mid = new Vector2(source.x + (target.x - source.x) / 2, target.y - 50); + _turningPath.Create(new GPathPoint(source), new GPathPoint(mid), new GPathPoint(target)); + GTween.To(source, target, EffectDuration).SetUserData(true).SetTarget(this) + .SetPath(_turningPath) + .OnUpdate(OnTurnUpdate).OnComplete(OnTurnComplete); + } + + void OnTurnUpdate(GTweener tweener) + { + _dragPoint = tweener.value.vec2; + _turningAmount = _dragPoint.x / (_coverTurningOp != CoverTurningOp.None ? _frontCover.width * 2 : _pageWidth * 2); + if (_draggingCorner == Corner.TR || _draggingCorner == Corner.BR) + _turningAmount = 1 - _turningAmount; + PlayTurnEffect(); + } + + void OnTurnComplete(GTweener tweener) + { + bool suc = (bool)tweener.userData; + _draggingCorner = Corner.INVALID; + if (suc && _turningTarget != -1) + _currentPage = _turningTarget; + if (suc && _coverTurningOp != CoverTurningOp.None) + { + if (_coverTurningOp == CoverTurningOp.ShowFront) + _coverStatus = CoverStatus.ShowingFront; + else if (_coverTurningOp == CoverTurningOp.ShowBack) + _coverStatus = CoverStatus.ShowingBack; + else + _coverStatus = CoverStatus.Hidden; + } + _coverTurningOp = CoverTurningOp.None; + _turningTarget = -1; + + RenderPages(); + + DispatchEvent("onTurnComplete"); + } + + void PlayTurnEffect() + { + if (_coverTurningOp != CoverTurningOp.None) + PlayCoverEffect(); + + if (_turningTarget != -1) + { + if (_paper == Paper.Hard) + PlayHardEffect(); + else + PlaySoftEffect(); + } + } + + void PlayCoverEffect() + { + float amount = Mathf.Clamp01(_turningAmount); + float ratio; + bool isLeft; + GComponent turningObj = (_coverTurningOp == CoverTurningOp.ShowFront || _coverTurningOp == CoverTurningOp.HideFront) ? _frontCover : _backCover; + PolygonMesh mesh = GetHardMesh(turningObj); + + if (amount < 0.5f) + { + ratio = 1 - amount * 2; + isLeft = _coverTurningOp == CoverTurningOp.ShowFront || _coverTurningOp == CoverTurningOp.HideBack; + } + else + { + ratio = (amount - 0.5f) * 2; + isLeft = _coverTurningOp == CoverTurningOp.HideFront || _coverTurningOp == CoverTurningOp.ShowBack; + } + + if (turningObj == _frontCover) + SetCoverStatus(turningObj, CoverType.Front, !isLeft); + else + SetCoverStatus(turningObj, CoverType.Back, isLeft); + + mesh.points.Clear(); + mesh.texcoords.Clear(); + if (isLeft) + { + float topOffset = 1f / 8 * (1 - ratio); + float xOffset = 1 - ratio; + mesh.Add(new Vector2(xOffset, 1 + topOffset)); + mesh.Add(new Vector2(xOffset, -topOffset)); + mesh.Add(new Vector2(1, 0)); + mesh.Add(new Vector2(1, 1)); + } + else + { + float topOffset = 1f / 8 * (1 - ratio); + mesh.Add(new Vector2(0, 1)); + mesh.Add(new Vector2(0, 0)); + mesh.Add(new Vector2(ratio, -topOffset)); + mesh.Add(new Vector2(ratio, 1 + topOffset)); + } + + mesh.texcoords.AddRange(VertexBuffer.NormalizedUV); + } + + void PlayHardEffect() + { + float amount = Mathf.Clamp01(_turningAmount); + float ratio; + bool isLeft; + GComponent turningObj; + PolygonMesh mesh; + if (amount < 0.5f) + { + ratio = 1 - amount * 2; + isLeft = _turningTarget < _currentPage; + + turningObj = _objects[2]; + mesh = GetHardMesh(turningObj); + GetHardMesh(_objects[3]).points.Clear(); + } + else + { + ratio = (amount - 0.5f) * 2; + isLeft = _turningTarget > _currentPage; + + turningObj = _objects[3]; + mesh = GetHardMesh(turningObj); + GetHardMesh(_objects[2]).points.Clear(); + } + + mesh.points.Clear(); + mesh.texcoords.Clear(); + if (isLeft) + { + turningObj.x = 0; + + float topOffset = 1f / 8 * (1 - ratio); + float xOffset = 1 - ratio; + mesh.Add(new Vector2(xOffset, 1 + topOffset)); + mesh.Add(new Vector2(xOffset, -topOffset)); + mesh.Add(new Vector2(1, 0)); + mesh.Add(new Vector2(1, 1)); + } + else + { + turningObj.x = _pageWidth; + + float topOffset = 1f / 8 * (1 - ratio); + mesh.Add(new Vector2(0, 1)); + mesh.Add(new Vector2(0, 0)); + mesh.Add(new Vector2(ratio, -topOffset)); + mesh.Add(new Vector2(ratio, 1 + topOffset)); + } + + mesh.texcoords.AddRange(VertexBuffer.NormalizedUV); + } + + void FlipPoint(ref Vector2 pt, float w, float h) + { + switch (_draggingCorner) + { + case Corner.TL: + pt.x = w - pt.x; + pt.y = h - pt.y; + break; + case Corner.BL: + pt.x = w - pt.x; + break; + case Corner.TR: + pt.y = h - pt.y; + break; + } + } + + void PlaySoftEffect() + { + GComponent turningObj1 = _objects[2]; + GComponent turningObj2 = _objects[3]; + PolygonMesh mesh1 = GetSoftMesh(turningObj1); + PolygonMesh mesh2 = GetSoftMesh(turningObj2); + + /** + * a + * / \ + * f(0,0)------/ b--g(w,0) + * | / / | + * | / / | + * | c / | + * | \ / | + * | \ / | + * e(0,h)-----d--------h(w,h) + */ + Vector2 pa, pb, pc, pd, pe, pf, pg, ph; + float k, angle; + bool threePoints = false; + + pc = _dragPoint; + pe = new Vector2(0, _pageHeight); + pf = Vector2.zero; + pg = new Vector2(_pageWidth, 0); + ph = new Vector2(_pageWidth, _pageHeight); + + FlipPoint(ref pc, _pageWidth * 2, _pageHeight); + pc.x -= _pageWidth; + if (pc.x >= _pageWidth) + return; + + k = (ph.y - pc.y) / (ph.x - pc.x); + float k2 = 1 + Mathf.Pow(k, 2); + float min; + min = ph.x - _pageWidth * 2 / k2; + if (pc.x < min) + { + pc.x = min; + if (pc.x >= _pageWidth) + return; + pc.y = ph.y - k * (ph.x - pc.x); + } + + min = ph.x - (_pageWidth + _pageHeight * k) * 2 / k2; + if (pc.x < min) + { + pc.x = min; + if (pc.x >= _pageWidth) + return; + pc.y = ph.y - k * (ph.x - pc.x); + } + + angle = Mathf.Atan(k) * Mathf.Rad2Deg; + pd = new Vector2(_pageWidth - k2 * (ph.x - pc.x) / 2, _pageHeight); + pb = new Vector2(pd.x + _pageHeight * k, 0); + pa = new Vector2(); + + if (pb.x > _pageWidth) + { + pb.x = _pageWidth; + pa = new Vector2(_pageWidth, _pageHeight - (_pageWidth - pd.x) / k); + threePoints = true; + } + + FlipPoint(ref pa, _pageWidth, _pageHeight); + FlipPoint(ref pb, _pageWidth, _pageHeight); + FlipPoint(ref pd, _pageWidth, _pageHeight); + FlipPoint(ref pc, _pageWidth, _pageHeight); + if (_draggingCorner == Corner.BL || _draggingCorner == Corner.TL) + angle = -angle; + + switch (_draggingCorner) + { + case Corner.BR: + { + turningObj1.SetPivot(0, 0, true); + turningObj1.position = new Vector2(_pageWidth, 0); + + turningObj2.SetPivot(0, 1, true); + turningObj2.position = new Vector2(_pageWidth + pc.x, pc.y); + turningObj2.rotation = 2 * angle; + + if (_softShadow != null) + { + _softShadow.SetPivot(1, (_softShadow.height - 30) / _softShadow.height, true); + _softShadow.position = new Vector2(Vector2.Distance(pc, pd), _pageHeight); + _softShadow.rotation = -angle; + if (_softShadow.x > _pageWidth - 20) + _softShadow.alpha = (_pageWidth - _softShadow.x) / 20; + else + _softShadow.alpha = 1; + } + + mesh1.points.Clear(); + mesh1.Add(pe); + mesh1.Add(pf); + mesh1.Add(pb); + if (threePoints) + mesh1.Add(pa); + mesh1.Add(pd); + + mesh2.points.Clear(); + mesh2.Add(new Vector2(Vector2.Distance(pc, pd), _pageHeight)); + mesh2.Add(new Vector2(0, _pageHeight)); + if (threePoints) + mesh2.Add(new Vector2(0, _pageHeight - Vector2.Distance(pc, pa))); + else + { + mesh2.Add(new Vector2(0, 0)); + mesh2.Add(new Vector2(Vector2.Distance(pg, pb), 0)); + } + break; + } + case Corner.TR: + { + turningObj1.SetPivot(0, 0, true); + turningObj1.position = new Vector2(_pageWidth, 0); + + turningObj2.SetPivot(0, 0, true); + turningObj2.position = new Vector2(_pageWidth + pc.x, pc.y); + turningObj2.rotation = -2 * angle; + + if (_softShadow != null) + { + _softShadow.SetPivot(1, 30 / _softShadow.height, true); + _softShadow.position = new Vector2(Vector2.Distance(pc, pd), 0); + _softShadow.rotation = angle; + if (_softShadow.x > _pageWidth - 20) + _softShadow.alpha = (_pageWidth - _softShadow.x) / 20; + else + _softShadow.alpha = 1; + } + + mesh1.points.Clear(); + mesh1.Add(pe); + mesh1.Add(pf); + mesh1.Add(pd); + if (threePoints) + mesh1.Add(pa); + mesh1.Add(pb); + + mesh2.points.Clear(); + if (threePoints) + mesh2.Add(new Vector2(0, Vector2.Distance(pc, pa))); + else + { + mesh2.Add(new Vector2(Vector2.Distance(pb, ph), _pageHeight)); + mesh2.Add(new Vector2(0, _pageHeight)); + } + mesh2.Add(new Vector2(0, 0)); + mesh2.Add(new Vector2(Vector2.Distance(pc, pd), 0)); + break; + } + case Corner.BL: + { + turningObj1.SetPivot(0, 0, true); + turningObj1.position = Vector2.zero; + + turningObj2.SetPivot(1, 1, true); + turningObj2.position = pc; + turningObj2.rotation = 2 * angle; + + if (_softShadow != null) + { + _softShadow.SetPivot(1, 30 / _softShadow.height, true); + _softShadow.position = new Vector2(_pageWidth - Vector2.Distance(pc, pd), _pageHeight); + _softShadow.rotation = 180 - angle; + if (_softShadow.x < 20) + _softShadow.alpha = (_softShadow.x - 20) / 20; + else + _softShadow.alpha = 1; + } + + mesh1.points.Clear(); + mesh1.Add(pb); + mesh1.Add(pg); + mesh1.Add(ph); + mesh1.Add(pd); + if (threePoints) + mesh1.Add(pa); + + mesh2.points.Clear(); + if (!threePoints) + { + mesh2.Add(new Vector2(_pageWidth - Vector2.Distance(pf, pb), 0)); + mesh2.Add(new Vector2(_pageWidth, 0)); + } + else + mesh2.Add(new Vector2(_pageWidth, _pageHeight - Vector2.Distance(pc, pa))); + mesh2.Add(new Vector2(_pageWidth, _pageHeight)); + mesh2.Add(new Vector2(_pageWidth - Vector2.Distance(pc, pd), _pageHeight)); + break; + } + case Corner.TL: + { + turningObj1.SetPivot(0, 0, true); + turningObj1.position = Vector2.zero; + + turningObj2.SetPivot(1, 0, true); + turningObj2.position = pc; + turningObj2.rotation = -2 * angle; + + if (_softShadow != null) + { + _softShadow.SetPivot(1, (_softShadow.height - 30) / _softShadow.height, true); + _softShadow.position = new Vector2(_pageWidth - Vector2.Distance(pc, pd), 0); + _softShadow.rotation = 180 + angle; + if (_softShadow.x < 20) + _softShadow.alpha = (_softShadow.x - 20) / 20; + else + _softShadow.alpha = 1; + } + + mesh1.points.Clear(); + mesh1.Add(pd); + mesh1.Add(pg); + mesh1.Add(ph); + mesh1.Add(pb); + if (threePoints) + mesh1.Add(pa); + + mesh2.points.Clear(); + mesh2.Add(new Vector2(_pageWidth - Vector2.Distance(pc, pd), 0)); + mesh2.Add(new Vector2(_pageWidth, 0)); + if (threePoints) + mesh2.Add(new Vector2(_pageWidth, Vector2.Distance(pc, pa))); + else + { + mesh2.Add(new Vector2(_pageWidth, _pageHeight)); + mesh2.Add(new Vector2(_pageWidth - Vector2.Distance(pe, pb), _pageHeight)); + } + break; + } + } + } + + void RenderPages() + { + RenderCovers(); + + if (_softShadow != null) + _softShadow.RemoveFromParent(); + + int curPage = _currentPage; + if (curPage % 2 == 0) + curPage--; + + int leftPage, rightPage, turningPageBack, turningPageFront; + leftPage = curPage; + rightPage = leftPage < _pageCount - 1 ? (leftPage + 1) : -1; + + if (_turningTarget != -1) + { + int tt = _turningTarget; + if (tt % 2 == 0) + tt = tt - 1; + + if (tt == curPage) + { + _currentPage = _turningTarget; + turningPageBack = turningPageFront = -1; + } + else if (tt > leftPage) + { + turningPageFront = tt; + turningPageBack = rightPage; + rightPage = tt < _pageCount - 1 ? (tt + 1) : -1; + } + else + { + turningPageFront = tt > 0 ? (tt + 1) : 0; + turningPageBack = leftPage; + leftPage = tt > 0 ? tt : -1; + } + } + else + { + turningPageBack = turningPageFront = -1; + } + + _objectNewIndice[0] = leftPage; + _objectNewIndice[1] = rightPage; + _objectNewIndice[2] = turningPageBack; + _objectNewIndice[3] = turningPageFront; + + for (int i = 0; i < 4; i++) + { + int pageIndex = _objectNewIndice[i]; + if (pageIndex != -1) + { + for (int j = 0; j < 4; j++) + { + int pageIndex2 = _objectIndice[j]; + if (pageIndex2 == pageIndex) + { + if (j != i) + { + _objectIndice[j] = _objectIndice[i]; + _objectIndice[i] = pageIndex; + + GComponent tmp = _objects[j]; + _objects[j] = _objects[i]; + _objects[i] = tmp; + } + break; + } + } + } + } + + for (int i = 0; i < 4; i++) + { + GComponent obj = _objects[i]; + int oldIndex = _objectIndice[i]; + int index = _objectNewIndice[i]; + _objectIndice[i] = index; + if (index == -1) + { + if (obj != null) + obj.RemoveFromParent(); + } + else if (oldIndex != index) + { + if (obj == null) + { + obj = UIPackage.CreateObjectFromURL(_pageResource).asCom; + obj.displayObject.home = this.displayObject.cachedTransform; + _objects[i] = obj; + } + + _pagesContainer.AddChild(obj); + pageRenderer(index, obj); + } + else + { + if (obj.parent == null) + { + _pagesContainer.AddChild(obj); + pageRenderer(index, obj); + } + else + _pagesContainer.AddChild(obj); + } + + if (obj != null && obj.parent != null) + { + Controller c1 = obj.GetController("side"); + if (c1 != null) + { + if (index == 0) + c1.selectedPage = "first"; + else if (index == _pageCount - 1) + c1.selectedPage = "last"; + else + c1.selectedPage = (index % 2 == 0) ? "right" : "left"; + } + + if (i == 0 || i == 1) + SetPageNormal(obj, i == 0); + else if (_paper == Paper.Soft) + SetPageSoft(obj, i == 2); + else + SetPageHard(obj, i == 2); + } + } + } + + void RenderCovers() + { + if (_frontCover != null) + { + if (_coverTurningOp == CoverTurningOp.ShowFront || _coverTurningOp == CoverTurningOp.HideFront) + { + SetPageHard(_frontCover, true); + SetCoverStatus(_frontCover, CoverType.Front, _coverTurningOp == CoverTurningOp.HideFront); + } + else + { + if (_frontCover.displayObject.cacheAsBitmap) + SetCoverNormal(_frontCover, CoverType.Front); + + SetCoverStatus(_frontCover, CoverType.Front, _coverStatus == CoverStatus.ShowingFront); + } + } + + if (_backCover != null) + { + if (_coverTurningOp == CoverTurningOp.ShowBack || _coverTurningOp == CoverTurningOp.HideBack) + { + SetPageHard(_backCover, true); + SetCoverStatus(_backCover, CoverType.Back, _coverTurningOp == CoverTurningOp.HideBack); + } + else + { + if (_backCover.displayObject.cacheAsBitmap) + SetCoverNormal(_backCover, CoverType.Back); + + SetCoverStatus(_backCover, CoverType.Back, _coverStatus == CoverStatus.ShowingBack); + } + } + } + + void SetupHotspot(GObject obj, Corner corner) + { + if (obj == null) + return; + + obj.data = corner; + + obj.onTouchBegin.Add(__touchBegin); + obj.onTouchMove.Add(__touchMove); + obj.onTouchEnd.Add(__touchEnd); + } + + void SetPageHard(GComponent obj, bool front) + { + obj.touchable = false; + obj.displayObject.cacheAsBitmap = true; + if (obj.mask != null) + { + obj.mask.RemoveFromParent(); + obj.mask = null; + } + + PolygonMesh mesh = obj.displayObject.paintingGraphics.GetMeshFactory(); + mesh.usePercentPositions = true; + mesh.points.Clear(); + mesh.texcoords.Clear(); + obj.displayObject.paintingGraphics.SetMeshDirty(); + + if (front) + { + mesh.points.AddRange(VertexBuffer.NormalizedPosition); + mesh.texcoords.AddRange(VertexBuffer.NormalizedUV); + } + } + + void SetPageSoft(GComponent obj, bool front) + { + obj.touchable = false; + obj.displayObject.cacheAsBitmap = false; + DisplayObject mask = front ? _mask1.displayObject : _mask2.displayObject; + obj.mask = mask; + + PolygonMesh mesh = mask.graphics.GetMeshFactory(); + mesh.usePercentPositions = false; + mesh.points.Clear(); + mesh.texcoords.Clear(); + mask.graphics.SetMeshDirty(); + + if (front) + { + mesh.Add(new Vector2(0, _pageHeight)); + mesh.Add(Vector2.zero); + mesh.Add(new Vector2(_pageWidth, 0)); + mesh.Add(new Vector2(_pageWidth, _pageHeight)); + } + else if (_softShadow != null) + obj.AddChild(_softShadow); + } + + void SetPageNormal(GComponent obj, bool left) + { + obj.displayObject.cacheAsBitmap = false; + obj.touchable = true; + obj.SetPivot(0, 0, true); + if (left) + obj.SetXY(0, 0); + else + obj.SetXY(_pageWidth, 0); + obj.rotation = 0; + if (obj.mask != null) + { + obj.mask.RemoveFromParent(); + obj.mask = null; + } + } + + void SetCoverStatus(GComponent obj, CoverType coverType, bool show) + { + Controller c = obj.GetController("side"); + if (show) + { + if (c.selectedIndex != 0) + { + obj.position = coverType == CoverType.Front ? _backCoverPos : _frontCoverPos; + obj.parent.SetChildIndexBefore(obj, obj.parent.GetChildIndex(_pagesContainer) + 1); + c.selectedIndex = 0; //front + + if (obj.displayObject.cacheAsBitmap) + obj.displayObject.cacheAsBitmap = true; //refresh + } + } + else + { + if (c.selectedIndex != 1) + { + obj.position = coverType == CoverType.Front ? _frontCoverPos : _backCoverPos; + obj.parent.SetChildIndexBefore(obj, obj.parent.GetChildIndex(_pagesContainer)); + c.selectedIndex = 1; //back + + if (obj.displayObject.cacheAsBitmap) + obj.displayObject.cacheAsBitmap = true; //refresh + } + } + } + + void SetCoverNormal(GComponent obj, CoverType coverType) + { + obj.position = coverType == CoverType.Front ? _frontCoverPos : _backCoverPos; + obj.displayObject.cacheAsBitmap = false; + obj.touchable = true; + obj.parent.SetChildIndexBefore(obj, obj.parent.GetChildIndex(_pagesContainer)); + obj.GetController("side").selectedIndex = 1; //back + } + + PolygonMesh GetHardMesh(GComponent obj) + { + obj.displayObject.paintingGraphics.SetMeshDirty(); + return obj.displayObject.paintingGraphics.GetMeshFactory(); + } + + PolygonMesh GetSoftMesh(GComponent obj) + { + obj.mask.graphics.SetMeshDirty(); + return obj.mask.graphics.GetMeshFactory(); + } + + void UpdateDragPosition(Vector2 pos) + { + if (_coverTurningOp != CoverTurningOp.None) + { + _dragPoint = GlobalToLocal(pos) - _frontCoverPos; + _turningAmount = _dragPoint.x / (2 * _frontCover.width); + } + else + { + _dragPoint = _pagesContainer.GlobalToLocal(pos); + _turningAmount = _dragPoint.x / (2 * _pageWidth); + } + + if (_draggingCorner == Corner.TR || _draggingCorner == Corner.BR) + _turningAmount = 1 - _turningAmount; + } + + Vector2 GetCornerPosition(Corner corner, bool isCover) + { + float w = isCover ? _frontCover.width : _pageWidth; + float h = isCover ? _frontCover.height : _pageHeight; + Vector2 pt; + switch (corner) + { + case Corner.BL: + pt = new Vector2(0, h); + break; + + case Corner.TR: + pt = new Vector2(w * 2, 0); + break; + + case Corner.BR: + pt = new Vector2(w * 2, h); + break; + + default: + pt = Vector2.zero; + break; + } + + return pt; + } + + void __touchBegin(EventContext context) + { + GTween.Kill(this, true); + + _draggingCorner = (Corner)((GObject)context.sender).data; + if (_draggingCorner == Corner.TL || _draggingCorner == Corner.BL) + { + if (_coverStatus == CoverStatus.ShowingBack) + { + _coverTurningOp = CoverTurningOp.HideBack; + } + else if (_objectNewIndice[0] == -1) + { + if (_frontCover != null && _coverStatus != CoverStatus.ShowingFront) + _coverTurningOp = CoverTurningOp.ShowFront; + else + _draggingCorner = Corner.INVALID; + } + else + { + _turningTarget = _objectNewIndice[0] - 2; + if (_turningTarget < 0) + _turningTarget = 0; + } + } + else + { + if (_coverStatus == CoverStatus.ShowingFront) + { + _coverTurningOp = CoverTurningOp.HideFront; + } + else if (_objectNewIndice[1] == -1) + { + if (_backCover != null && _coverStatus != CoverStatus.ShowingBack) + _coverTurningOp = CoverTurningOp.ShowBack; + else + _draggingCorner = Corner.INVALID; + } + else + { + _turningTarget = _objectNewIndice[1] + 1; + } + } + + if (_draggingCorner != Corner.INVALID) + { + _touchDownTime = Time.unscaledTime; + UpdateDragPosition(context.inputEvent.position); + RenderPages(); + PlayTurnEffect(); + + context.CaptureTouch(); + } + } + + void __touchMove(EventContext context) + { + if (_draggingCorner != Corner.INVALID) + { + UpdateDragPosition(context.inputEvent.position); + PlayTurnEffect(); + } + } + + void __touchEnd(EventContext context) + { + if (_draggingCorner != Corner.INVALID) + { + bool suc = _turningAmount > 0.4f || (Time.unscaledTime - _touchDownTime < 0.35f); + Vector2 target; + if (suc) + { + if (_draggingCorner == Corner.TL || _draggingCorner == Corner.BL) + target = GetCornerPosition(_draggingCorner + 2, _coverTurningOp != CoverTurningOp.None); + else + target = GetCornerPosition(_draggingCorner - 2, _coverTurningOp != CoverTurningOp.None); + } + else + target = GetCornerPosition(_draggingCorner, _coverTurningOp != CoverTurningOp.None); + + float duration = Mathf.Max(EffectDuration * 0.5f, Mathf.Abs(target.x - _dragPoint.x) / (_pageWidth * 2) * EffectDuration); + GTween.To(_dragPoint, target, duration).SetTarget(this).SetUserData(suc) + .OnUpdate(OnTurnUpdate).OnComplete(OnTurnComplete); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs.meta new file mode 100644 index 0000000..9793987 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnPage/FairyBook.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 01eed0ee3e180444b830df9b94ea82b9 +timeCreated: 1547288041 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs b/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs new file mode 100644 index 0000000..cb67767 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs @@ -0,0 +1,78 @@ +using UnityEngine; +using FairyGUI; + +public class TurnPageMain : MonoBehaviour +{ + GComponent _mainView; + FairyBook _book; + GSlider _slider; + + void Awake() + { + UIPackage.AddPackage("UI/TurnPage"); + UIObjectFactory.SetPackageItemExtension("ui://TurnPage/Book", typeof(FairyBook)); + UIObjectFactory.SetPackageItemExtension("ui://TurnPage/Page", typeof(BookPage)); + } + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + + _book = (FairyBook)_mainView.GetChild("book"); + _book.SetSoftShadowResource("ui://TurnPage/shadow_soft"); + _book.pageRenderer = RenderPage; + _book.pageCount = 20; + _book.currentPage = 0; + _book.ShowCover(FairyBook.CoverType.Front, false); + _book.onTurnComplete.Add(OnTurnComplete); + + GearBase.disableAllTweenEffect = true; + _mainView.GetController("bookPos").selectedIndex = 1; + GearBase.disableAllTweenEffect = false; + + _mainView.GetChild("btnNext").onClick.Add(() => + { + _book.TurnNext(); + }); + _mainView.GetChild("btnPrev").onClick.Add(() => + { + _book.TurnPrevious(); + }); + + _slider = _mainView.GetChild("pageSlide").asSlider; + _slider.max = _book.pageCount - 1; + _slider.value = 0; + _slider.onGripTouchEnd.Add(() => + { + _book.TurnTo((int)_slider.value); + }); + } + + void OnTurnComplete() + { + _slider.value = _book.currentPage; + + if (_book.isCoverShowing(FairyBook.CoverType.Front)) + _mainView.GetController("bookPos").selectedIndex = 1; + else if (_book.isCoverShowing(FairyBook.CoverType.Back)) + _mainView.GetController("bookPos").selectedIndex = 2; + else + _mainView.GetController("bookPos").selectedIndex = 0; + } + + void RenderPage(int index, GComponent page) + { + ((BookPage)page).render(index); + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs.meta new file mode 100644 index 0000000..0931fba --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TurnPage/TurnPageMain.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0246af0692f804e419764f96010083e0 +timeCreated: 1547288041 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TypingEffect.meta b/Assets/Plugins/FairyGUI/Examples/TypingEffect.meta new file mode 100644 index 0000000..70e6f02 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TypingEffect.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1d6f3a0c3e5008542a8aa0103513abdf +folderAsset: yes +timeCreated: 1477729673 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs b/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs new file mode 100644 index 0000000..5bdd34b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using FairyGUI; + +public class TypingEffectMain : MonoBehaviour +{ + GComponent _mainView; + TypingEffect _te1; + TypingEffect _te2; + + void Awake() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + } + + void Start() + { + _mainView = this.GetComponent().ui; + + _te1 = new TypingEffect(_mainView.GetChild("n2").asTextField); + _te1.Start(); + Timers.inst.StartCoroutine(_te1.Print(0.050f)); + + _te2 = new TypingEffect(_mainView.GetChild("n3").asTextField); + _te2.Start(); + Timers.inst.Add(0.050f, 0, PrintText); + } + + void PrintText(object param) + { + if (!_te2.Print()) + { + Timers.inst.Remove(PrintText); + } + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs.meta new file mode 100644 index 0000000..79f0a9f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/TypingEffect/TypingEffectMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2686886b98b45764893ae635e5b76d89 +timeCreated: 1477472029 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/VirtualList.meta b/Assets/Plugins/FairyGUI/Examples/VirtualList.meta new file mode 100644 index 0000000..4e9e442 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/VirtualList.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e3bca127ef0001a49a2edebb9f806b87 +folderAsset: yes +timeCreated: 1456387596 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs b/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs new file mode 100644 index 0000000..17ab325 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs @@ -0,0 +1,48 @@ +using UnityEngine; +using FairyGUI; + +public class VirtualListMain : MonoBehaviour +{ + GComponent _mainView; + GList _list; + + void Awake() + { + UIPackage.AddPackage("UI/VirtualList"); + UIObjectFactory.SetPackageItemExtension("ui://VirtualList/mailItem", typeof(MailItem)); + } + + void Start() + { + Application.targetFrameRate = 60; + Stage.inst.onKeyDown.Add(OnKeyDown); + + _mainView = this.GetComponent().ui; + _mainView.GetChild("n6").onClick.Add(() => { _list.AddSelection(500, true); }); + _mainView.GetChild("n7").onClick.Add(() => { _list.scrollPane.ScrollTop(); }); + _mainView.GetChild("n8").onClick.Add(() => { _list.scrollPane.ScrollBottom(); }); + + _list = _mainView.GetChild("mailList").asList; + _list.SetVirtual(); + + _list.itemRenderer = RenderListItem; + _list.numItems = 1000; + } + + void RenderListItem(int index, GObject obj) + { + MailItem item = (MailItem)obj; + item.setFetched(index % 3 == 0); + item.setRead(index % 2 == 0); + item.setTime("5 Nov 2015 16:24:33"); + item.title = index + " Mail title here"; + } + + void OnKeyDown(EventContext context) + { + if (context.inputEvent.keyCode == KeyCode.Escape) + { + Application.Quit(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs.meta b/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs.meta new file mode 100644 index 0000000..3f76352 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Examples/VirtualList/VirtualListMain.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cfc2db50aaedb7843a486cc282c0ec02 +timeCreated: 1456387599 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources.meta b/Assets/Plugins/FairyGUI/Resources.meta new file mode 100644 index 0000000..6e4dc8c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 66d9312cafc49bf4cad1ccdbb5b6668b +folderAsset: yes +timeCreated: 1446459912 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders.meta b/Assets/Plugins/FairyGUI/Resources/Shaders.meta new file mode 100644 index 0000000..f308cfd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cc39210f7f4d03f4aa637689b9d90d75 +folderAsset: yes +timeCreated: 1446459912 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn.meta new file mode 100644 index 0000000..dddf6b3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b5137d7a41873f9499f95f860a6cef17 +folderAsset: yes +timeCreated: 1465913233 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader b/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader new file mode 100644 index 0000000..06a45a0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader @@ -0,0 +1,58 @@ +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "FairyGUI/BlurFilter" { + Properties { + _MainTex ("Base (RGB)", 2D) = "white" {} +} + +SubShader { + Pass { + ZTest Always + ZWrite Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata_t { + float4 vertex : POSITION; + float2 texcoord : TEXCOORD0; + }; + + struct v2f { + float4 vertex : SV_POSITION; + half2 texcoord : TEXCOORD0; + half2 taps[4] : TEXCOORD1; + }; + + sampler2D _MainTex; + half4 _MainTex_TexelSize; + half4 _BlurOffsets; + + v2f vert (appdata_t v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.texcoord = v.texcoord - _BlurOffsets.xy * _MainTex_TexelSize.xy; + o.taps[0] = o.texcoord + _MainTex_TexelSize * _BlurOffsets.xy; + o.taps[1] = o.texcoord - _MainTex_TexelSize * _BlurOffsets.xy; + o.taps[2] = o.texcoord + _MainTex_TexelSize * _BlurOffsets.xy * half2(1,-1); + o.taps[3] = o.texcoord - _MainTex_TexelSize * _BlurOffsets.xy * half2(1,-1); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + half4 color = tex2D(_MainTex, i.taps[0]); + color += tex2D(_MainTex, i.taps[1]); + color += tex2D(_MainTex, i.taps[2]); + color += tex2D(_MainTex, i.taps[3]); + return color * 0.25; + } + ENDCG + } +} +Fallback off +} diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader.meta new file mode 100644 index 0000000..81312dc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders/AddOn/FairyGUI-BlurFilter.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f83d3bb1d90aaf54d8aed0783317662f +timeCreated: 1465913243 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader new file mode 100644 index 0000000..694ccd5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader @@ -0,0 +1,148 @@ +// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "FairyGUI/BMFont" +{ + Properties + { + _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {} + + _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 + + _BlendSrcFactor ("Blend SrcFactor", Float) = 5 + _BlendDstFactor ("Blend DstFactor", Float) = 10 + } + + SubShader + { + LOD 100 + + Tags + { + "Queue" = "Transparent" + "IgnoreProjector" = "True" + "RenderType" = "Transparent" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + Fog { Mode Off } + Blend [_BlendSrcFactor] [_BlendDstFactor] + ColorMask [_ColorMask] + + Pass + { + CGPROGRAM + #pragma multi_compile _ GRAYED + #pragma multi_compile _ CLIPPED SOFT_CLIPPED + #pragma vertex vert + #pragma fragment frag + #pragma exclude_renderers d3d9 opengl flash + + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + + #ifdef CLIPPED + float2 clipPos : TEXCOORD1; + #endif + + #ifdef SOFT_CLIPPED + float2 clipPos : TEXCOORD1; + #endif + }; + + sampler2D _MainTex; + + CBUFFER_START(UnityPerMaterial) + #ifdef CLIPPED + float4 _ClipBox = float4(-2, -2, 0, 0); + #endif + + #ifdef SOFT_CLIPPED + float4 _ClipBox = float4(-2, -2, 0, 0); + float4 _ClipSoftness = float4(0, 0, 0, 0); + #endif + CBUFFER_END + + v2f vert (appdata_t v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.texcoord = v.texcoord; + #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550) + o.color.rgb = GammaToLinearSpace(v.color.rgb); + o.color.a = v.color.a; + #else + o.color = v.color; + #endif + + #ifdef CLIPPED + o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; + #endif + + #ifdef SOFT_CLIPPED + o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; + #endif + + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + fixed4 col = i.color; + fixed4 tcol = tex2D(_MainTex, i.texcoord); + col.a *= tcol[i.texcoord.z];//z stores channel + + #ifdef GRAYED + fixed grey = dot(col.rgb, fixed3(0.299, 0.587, 0.114)); + col.rgb = fixed3(grey, grey, grey); + #endif + + #ifdef SOFT_CLIPPED + float2 factor; + float2 condition = step(i.clipPos.xy, 0); + float4 clip_softness = _ClipSoftness * float4(condition, 1 - condition); + factor.xy = (1.0 - abs(i.clipPos.xy)) * (clip_softness.xw + clip_softness.zy); + col.a *= clamp(min(factor.x, factor.y), 0.0, 1.0); + #endif + #ifdef CLIPPED + float2 factor = abs(i.clipPos); + col.a *= step(max(factor.x, factor.y), 1); + #endif + + return col; + } + ENDCG + } + } + + //Fallback "FairyGUI/Text" +} diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader.meta new file mode 100644 index 0000000..7039489 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-BMFont.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cd79153f88fa7334ea6c5564c053bdca +timeCreated: 1459224288 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader new file mode 100644 index 0000000..f00edb8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader @@ -0,0 +1,177 @@ +// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "FairyGUI/Image" +{ + Properties + { + _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {} + + _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 + + _BlendSrcFactor ("Blend SrcFactor", Float) = 5 + _BlendDstFactor ("Blend DstFactor", Float) = 10 + } + + SubShader + { + LOD 100 + + Tags + { + "Queue" = "Transparent" + "IgnoreProjector" = "True" + "RenderType" = "Transparent" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + Fog { Mode Off } + Blend [_BlendSrcFactor] [_BlendDstFactor], One One + ColorMask [_ColorMask] + + Pass + { + CGPROGRAM + #pragma multi_compile _ COMBINED + #pragma multi_compile _ GRAYED COLOR_FILTER + #pragma multi_compile _ CLIPPED SOFT_CLIPPED ALPHA_MASK + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + + #ifdef CLIPPED + float2 clipPos : TEXCOORD1; + #endif + + #ifdef SOFT_CLIPPED + float2 clipPos : TEXCOORD1; + #endif + }; + + sampler2D _MainTex; + + #ifdef COMBINED + sampler2D _AlphaTex; + #endif + + CBUFFER_START(UnityPerMaterial) + #ifdef CLIPPED + float4 _ClipBox = float4(-2, -2, 0, 0); + #endif + + #ifdef SOFT_CLIPPED + float4 _ClipBox = float4(-2, -2, 0, 0); + float4 _ClipSoftness = float4(0, 0, 0, 0); + #endif + CBUFFER_END + + #ifdef COLOR_FILTER + float4x4 _ColorMatrix; + float4 _ColorOffset; + float _ColorOption = 0; + #endif + + v2f vert (appdata_t v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.texcoord = v.texcoord; + #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550) + o.color.rgb = GammaToLinearSpace(v.color.rgb); + o.color.a = v.color.a; + #else + o.color = v.color; + #endif + + #ifdef CLIPPED + o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; + #endif + + #ifdef SOFT_CLIPPED + o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; + #endif + + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + fixed4 col = tex2D(_MainTex, i.texcoord.xy / i.texcoord.w) * i.color; + + #ifdef COMBINED + col.a *= tex2D(_AlphaTex, i.texcoord.xy / i.texcoord.w).g; + #endif + + #ifdef GRAYED + fixed grey = dot(col.rgb, fixed3(0.299, 0.587, 0.114)); + col.rgb = fixed3(grey, grey, grey); + #endif + + #ifdef SOFT_CLIPPED + float2 factor; + float2 condition = step(i.clipPos.xy, 0); + float4 clip_softness = _ClipSoftness * float4(condition, 1 - condition); + factor.xy = (1.0 - abs(i.clipPos.xy)) * (clip_softness.xw + clip_softness.zy); + col.a *= clamp(min(factor.x, factor.y), 0.0, 1.0); + #endif + + #ifdef CLIPPED + float2 factor = abs(i.clipPos); + col.a *= step(max(factor.x, factor.y), 1); + #endif + + #ifdef COLOR_FILTER + if (_ColorOption == 0) + { + fixed4 col2 = col; + col2.r = dot(col, _ColorMatrix[0]) + _ColorOffset.x; + col2.g = dot(col, _ColorMatrix[1]) + _ColorOffset.y; + col2.b = dot(col, _ColorMatrix[2]) + _ColorOffset.z; + col2.a = dot(col, _ColorMatrix[3]) + _ColorOffset.w; + col = col2; + } + else //premultiply alpha + col.rgb *= col.a; + #endif + + #ifdef ALPHA_MASK + clip(col.a - 0.001); + #endif + + return col; + } + ENDCG + } + } +} diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader.meta new file mode 100644 index 0000000..36cfc08 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Image.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 263c97191482b3649ac7bf0810cc4f77 +timeCreated: 1459224288 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader new file mode 100644 index 0000000..31b58bc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader @@ -0,0 +1,145 @@ +// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' +// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' + +Shader "FairyGUI/Text" +{ + Properties + { + _MainTex ("Alpha (A)", 2D) = "white" {} + + _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 + + _BlendSrcFactor ("Blend SrcFactor", Float) = 5 + _BlendDstFactor ("Blend DstFactor", Float) = 10 + } + + SubShader + { + LOD 100 + + Tags + { + "Queue" = "Transparent" + "IgnoreProjector" = "True" + "RenderType" = "Transparent" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + Fog { Mode Off } + Blend [_BlendSrcFactor] [_BlendDstFactor] + ColorMask [_ColorMask] + + Pass + { + CGPROGRAM + #pragma multi_compile _ GRAYED + #pragma multi_compile _ CLIPPED SOFT_CLIPPED + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float4 texcoord : TEXCOORD0; + + #ifdef CLIPPED + float2 clipPos : TEXCOORD1; + #endif + + #ifdef SOFT_CLIPPED + float2 clipPos : TEXCOORD1; + #endif + }; + + sampler2D _MainTex; + + CBUFFER_START(UnityPerMaterial) + #ifdef CLIPPED + float4 _ClipBox = float4(-2, -2, 0, 0); + #endif + + #ifdef SOFT_CLIPPED + float4 _ClipBox = float4(-2, -2, 0, 0); + float4 _ClipSoftness = float4(0, 0, 0, 0); + #endif + CBUFFER_END + + v2f vert (appdata_t v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.texcoord = v.texcoord; + #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550) + o.color.rgb = GammaToLinearSpace(v.color.rgb); + o.color.a = v.color.a; + #else + o.color = v.color; + #endif + + #ifdef CLIPPED + o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; + #endif + + #ifdef SOFT_CLIPPED + o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy; + #endif + + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + fixed4 col = i.color; + col.a *= tex2D(_MainTex, i.texcoord).a; + + #ifdef GRAYED + fixed grey = dot(col.rgb, fixed3(0.299, 0.587, 0.114)); + col.rgb = fixed3(grey, grey, grey); + #endif + + #ifdef SOFT_CLIPPED + float2 factor; + float2 condition = step(i.clipPos.xy, 0); + float4 clip_softness = _ClipSoftness * float4(condition, 1 - condition); + factor.xy = (1.0 - abs(i.clipPos.xy)) * (clip_softness.xw + clip_softness.zy); + col.a *= clamp(min(factor.x, factor.y), 0.0, 1.0); + #endif + + #ifdef CLIPPED + float2 factor = abs(i.clipPos); + col.a *= step(max(factor.x, factor.y), 1); + #endif + + return col; + } + ENDCG + } + } +} diff --git a/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader.meta b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader.meta new file mode 100644 index 0000000..ec6565d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Resources/Shaders/FairyGUI-Text.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8526777372c6fef4f8162b3a7901dcb0 +timeCreated: 1459224288 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts.meta b/Assets/Plugins/FairyGUI/Scripts.meta new file mode 100644 index 0000000..8fde2fc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 18909c5f8494a7f45937618ed5a4fbd0 +folderAsset: yes +timeCreated: 1460480287 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core.meta b/Assets/Plugins/FairyGUI/Scripts/Core.meta new file mode 100644 index 0000000..ab578bc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: eed3a919a48726c46a61e180a615ef7d +folderAsset: yes +timeCreated: 1460480287 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs b/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs new file mode 100644 index 0000000..dd725ea --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs @@ -0,0 +1,110 @@ +using UnityEngine; +using NativeBlendMode = UnityEngine.Rendering.BlendMode; + +namespace FairyGUI +{ + /*关于BlendMode.Off, 这种模式相当于Blend Off指令的效果。当然,在着色器里使用Blend Off指令可以获得更高的效率, + 但因为Image着色器本身就有多个关键字,复制一个这样的着色器代价太大,所有为了节省Shader数量便增加了这样一种模式,也是可以接受的。 + */ + + /// + /// + /// + public enum BlendMode + { + Normal, + None, + Add, + Multiply, + Screen, + Erase, + Mask, + Below, + Off, + One_OneMinusSrcAlpha, + Custom1, + Custom2, + Custom3 + } + + /// + /// + /// + public class BlendModeUtils + { + public class BlendFactor + { + public NativeBlendMode srcFactor; + public NativeBlendMode dstFactor; + public bool pma; + + public BlendFactor(NativeBlendMode srcFactor, NativeBlendMode dstFactor, bool pma = false) + { + this.srcFactor = srcFactor; + this.dstFactor = dstFactor; + this.pma = pma; + } + } + + //Source指的是被计算的颜色,Destination是已经在屏幕上的颜色。 + //混合结果=Source * factor1 + Destination * factor2 + public static BlendFactor[] Factors = new BlendFactor[] { + //Normal + new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.OneMinusSrcAlpha), + //None + new BlendFactor(NativeBlendMode.One, NativeBlendMode.One), + //Add + new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.One), + //Multiply + new BlendFactor(NativeBlendMode.DstColor, NativeBlendMode.OneMinusSrcAlpha, true), + //Screen + new BlendFactor(NativeBlendMode.One, NativeBlendMode.OneMinusSrcColor, true), + //Erase + new BlendFactor(NativeBlendMode.Zero, NativeBlendMode.OneMinusSrcAlpha), + //Mask + new BlendFactor(NativeBlendMode.Zero, NativeBlendMode.SrcAlpha), + //Below + new BlendFactor(NativeBlendMode.OneMinusDstAlpha, NativeBlendMode.DstAlpha), + //Off + new BlendFactor(NativeBlendMode.One, NativeBlendMode.Zero), + //One_OneMinusSrcAlpha + new BlendFactor(NativeBlendMode.One, NativeBlendMode.OneMinusSrcAlpha), + //Custom1 + new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.OneMinusSrcAlpha), + //Custom2 + new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.OneMinusSrcAlpha), + //Custom3 + new BlendFactor(NativeBlendMode.SrcAlpha, NativeBlendMode.OneMinusSrcAlpha) + }; + + /// + /// + /// + /// + /// + public static void Apply(Material mat, BlendMode blendMode) + { + BlendFactor bf = Factors[(int)blendMode]; + mat.SetFloat(ShaderConfig.ID_BlendSrcFactor, (float)bf.srcFactor); + mat.SetFloat(ShaderConfig.ID_BlendDstFactor, (float)bf.dstFactor); + + if (bf.pma) + mat.SetFloat(ShaderConfig.ID_ColorOption, 1); + else + mat.SetFloat(ShaderConfig.ID_ColorOption, 0); + } + + /// + /// + /// + /// + /// + /// + public static void Override(BlendMode blendMode, NativeBlendMode srcFactor, NativeBlendMode dstFactor) + { + BlendFactor bf = Factors[(int)blendMode]; + bf.srcFactor = srcFactor; + bf.dstFactor = dstFactor; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs.meta new file mode 100644 index 0000000..df1b3eb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/BlendMode.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ce4df113fe8d9994c83e22680544ccdb +timeCreated: 1464679834 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs b/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs new file mode 100644 index 0000000..3ec6da1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs @@ -0,0 +1,205 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class CaptureCamera : MonoBehaviour + { + /// + /// + /// + [System.NonSerialized] + public Transform cachedTransform; + /// + /// + /// + [System.NonSerialized] + public Camera cachedCamera; + + [System.NonSerialized] + static CaptureCamera _main; + + [System.NonSerialized] + static int _layer = -1; + static int _hiddenLayer = -1; + + public const string Name = "Capture Camera"; + public const string LayerName = "VUI"; + public const string HiddenLayerName = "Hidden VUI"; + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void Init() + { + _main = null; + } +#endif + + void OnEnable() + { + cachedCamera = this.GetComponent(); + cachedTransform = this.gameObject.transform; + + if (this.gameObject.name == Name) + _main = this; + } + + /// + /// + /// + public static void CheckMain() + { + if (_main != null && _main.cachedCamera != null) + return; + + GameObject go = GameObject.Find(Name); + if (go != null) + { + _main = go.GetComponent(); + return; + } + + GameObject cameraObject = new GameObject(Name); + Camera camera = cameraObject.AddComponent(); + camera.depth = 0; + camera.cullingMask = 1 << layer; + camera.clearFlags = CameraClearFlags.SolidColor; + camera.backgroundColor = Color.clear; + camera.orthographic = true; + camera.orthographicSize = 5; + camera.nearClipPlane = -30; + camera.farClipPlane = 30; + camera.enabled = false; + camera.stereoTargetEye = StereoTargetEyeMask.None; + camera.allowHDR = false; + camera.allowMSAA = false; + cameraObject.AddComponent(); + } + + /// + /// + /// + public static int layer + { + get + { + if (_layer == -1) + { + _layer = LayerMask.NameToLayer(LayerName); + if (_layer == -1) + { + _layer = 30; + Debug.LogWarning("Please define two layers named '" + CaptureCamera.LayerName + "' and '" + CaptureCamera.HiddenLayerName + "'"); + } + } + + return _layer; + } + } + + /// + /// + /// + public static int hiddenLayer + { + get + { + if (_hiddenLayer == -1) + { + _hiddenLayer = LayerMask.NameToLayer(HiddenLayerName); + if (_hiddenLayer == -1) + { + Debug.LogWarning("Please define two layers named '" + CaptureCamera.LayerName + "' and '" + CaptureCamera.HiddenLayerName + "'"); + _hiddenLayer = 31; + } + } + + return _hiddenLayer; + } + } + + /// + /// + /// + /// + /// + /// + /// + public static RenderTexture CreateRenderTexture(int width, int height, bool stencilSupport) + { + RenderTexture texture = new RenderTexture(width, height, stencilSupport ? 24 : 0, RenderTextureFormat.ARGB32); + texture.antiAliasing = 1; + texture.filterMode = FilterMode.Bilinear; + texture.anisoLevel = 0; + texture.useMipMap = false; + texture.wrapMode = TextureWrapMode.Clamp; + texture.hideFlags = DisplayObject.hideFlags; + return texture; + } + + /// + /// + /// + /// + /// + /// + /// + public static void Capture(DisplayObject target, RenderTexture texture, float contentHeight, Vector2 offset) + { + CheckMain(); + + Matrix4x4 matrix = target.cachedTransform.localToWorldMatrix; + float scaleX = new Vector4(matrix.m00, matrix.m10, matrix.m20, matrix.m30).magnitude; + float scaleY = new Vector4(matrix.m01, matrix.m11, matrix.m21, matrix.m31).magnitude; + + Vector3 forward; + forward.x = matrix.m02; + forward.y = matrix.m12; + forward.z = matrix.m22; + + Vector3 upwards; + upwards.x = matrix.m01; + upwards.y = matrix.m11; + upwards.z = matrix.m21; + + float halfHeight = contentHeight * 0.5f; + + Camera camera = _main.cachedCamera; + camera.targetTexture = texture; + float aspect = (float)texture.width / texture.height; + camera.aspect = aspect * scaleX / scaleY; + camera.orthographicSize = halfHeight * scaleY; + _main.cachedTransform.localPosition = target.cachedTransform.TransformPoint(halfHeight * aspect - offset.x, -halfHeight + offset.y, 0); + if (forward != Vector3.zero) + _main.cachedTransform.localRotation = Quaternion.LookRotation(forward, upwards); + + int oldLayer = 0; + + if (target.graphics != null) + { + oldLayer = target.graphics.gameObject.layer; + target._SetLayerDirect(CaptureCamera.layer); + } + + if (target is Container) + { + oldLayer = ((Container)target).numChildren > 0 ? ((Container)target).GetChildAt(0).layer : CaptureCamera.hiddenLayer; + ((Container)target).SetChildrenLayer(CaptureCamera.layer); + } + + RenderTexture old = RenderTexture.active; + RenderTexture.active = texture; + GL.Clear(true, true, Color.clear); + camera.Render(); + RenderTexture.active = old; + + if (target.graphics != null) + target._SetLayerDirect(oldLayer); + + if (target is Container) + ((Container)target).SetChildrenLayer(oldLayer); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs.meta new file mode 100644 index 0000000..fc2a061 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/CaptureCamera.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d207151359c99fb448f4b3380bf41b0f +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs new file mode 100644 index 0000000..3f71a95 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs @@ -0,0 +1,1139 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class Container : DisplayObject + { + /// + /// + /// + public RenderMode renderMode; + + /// + /// + /// + public Camera renderCamera; + + /// + /// + /// + public bool opaque; + + /// + /// + /// + public Vector4? clipSoftness; + + /// + /// + /// + public IHitTest hitArea; + + /// + /// + /// + public bool touchChildren; + + /// + /// + /// + public event Action onUpdate; + + /// + /// + /// + public bool reversedMask; + + List _children; + DisplayObject _mask; + Rect? _clipRect; + List _batchElements; + + internal int _panelOrder; + internal DisplayObject _lastFocus; + + /// + /// + /// + public Container() + : base() + { + CreateGameObject("Container"); + Init(); + } + + /// + /// + /// + /// + public Container(string gameObjectName) + : base() + { + CreateGameObject(gameObjectName); + Init(); + } + + /// + /// + /// + /// + public Container(GameObject attachTarget) + : base() + { + SetGameObject(attachTarget); + Init(); + } + + void Init() + { + _children = new List(); + touchChildren = true; + } + + /// + /// + /// + public int numChildren + { + get { return _children.Count; } + } + + /// + /// + /// + /// + /// + public DisplayObject AddChild(DisplayObject child) + { + AddChildAt(child, _children.Count); + return child; + } + + /// + /// + /// + /// + /// + /// + public DisplayObject AddChildAt(DisplayObject child, int index) + { + int count = _children.Count; + if (index >= 0 && index <= count) + { + if (child.parent == this) + { + SetChildIndex(child, index); + } + else + { + child.RemoveFromParent(); + if (index == count) + _children.Add(child); + else + _children.Insert(index, child); + child.InternalSetParent(this); + + if (stage != null) + { + if (child is Container) + child.BroadcastEvent("onAddedToStage", null); + else + child.DispatchEvent("onAddedToStage", null); + } + + InvalidateBatchingState(true); + } + return child; + } + else + { + throw new Exception("Invalid child index"); + } + } + + /// + /// + /// + /// + /// + public bool Contains(DisplayObject child) + { + return _children.Contains(child); + } + + /// + /// + /// + /// + /// + public DisplayObject GetChildAt(int index) + { + return _children[index]; + } + + /// + /// + /// + /// + /// + public DisplayObject GetChild(string name) + { + int cnt = _children.Count; + for (int i = 0; i < cnt; ++i) + { + if (_children[i].name == name) + return _children[i]; + } + + return null; + } + + /// + /// + /// + /// + public DisplayObject[] GetChildren() + { + return _children.ToArray(); + } + + /// + /// + /// + /// + /// + public int GetChildIndex(DisplayObject child) + { + return _children.IndexOf(child); + } + + /// + /// + /// + /// + /// + public DisplayObject RemoveChild(DisplayObject child) + { + return RemoveChild(child, false); + } + + /// + /// + /// + /// + /// + /// + public DisplayObject RemoveChild(DisplayObject child, bool dispose) + { + if (child.parent != this) + throw new Exception("obj is not a child"); + + int i = _children.IndexOf(child); + if (i >= 0) + return RemoveChildAt(i, dispose); + else + return null; + } + + /// + /// + /// + /// + /// + public DisplayObject RemoveChildAt(int index) + { + return RemoveChildAt(index, false); + } + + /// + /// + /// + /// + /// + /// + public DisplayObject RemoveChildAt(int index, bool dispose) + { + if (index >= 0 && index < _children.Count) + { + DisplayObject child = _children[index]; + + if (stage != null && (child._flags & Flags.Disposed) == 0) + { + if (child is Container) + { + child.BroadcastEvent("onRemovedFromStage", null); + if (child == Stage.inst.focus || ((Container)child).IsAncestorOf(Stage.inst.focus)) + Stage.inst._OnFocusRemoving(this); + } + else + { + child.DispatchEvent("onRemovedFromStage", null); + if (child == Stage.inst.focus) + Stage.inst._OnFocusRemoving(this); + } + } + _children.Remove(child); + InvalidateBatchingState(true); + if (!dispose) + child.InternalSetParent(null); + else + child.Dispose(); + + return child; + } + else + throw new Exception("Invalid child index"); + } + + /// + /// + /// + public void RemoveChildren() + { + RemoveChildren(0, int.MaxValue, false); + } + + /// + /// + /// + /// + /// + /// + public void RemoveChildren(int beginIndex, int endIndex, bool dispose) + { + if (endIndex < 0 || endIndex >= numChildren) + endIndex = numChildren - 1; + + for (int i = beginIndex; i <= endIndex; ++i) + RemoveChildAt(beginIndex, dispose); + } + + /// + /// + /// + /// + /// + public void SetChildIndex(DisplayObject child, int index) + { + int oldIndex = _children.IndexOf(child); + if (oldIndex == index) return; + if (oldIndex == -1) throw new ArgumentException("Not a child of this container"); + _children.RemoveAt(oldIndex); + if (index >= _children.Count) + _children.Add(child); + else + _children.Insert(index, child); + InvalidateBatchingState(true); + } + + /// + /// + /// + /// + /// + public void SwapChildren(DisplayObject child1, DisplayObject child2) + { + int index1 = _children.IndexOf(child1); + int index2 = _children.IndexOf(child2); + if (index1 == -1 || index2 == -1) + throw new Exception("Not a child of this container"); + SwapChildrenAt(index1, index2); + } + + /// + /// + /// + /// + /// + public void SwapChildrenAt(int index1, int index2) + { + DisplayObject obj1 = _children[index1]; + DisplayObject obj2 = _children[index2]; + _children[index1] = obj2; + _children[index2] = obj1; + InvalidateBatchingState(true); + } + + /// + /// + /// + /// + /// + public void ChangeChildrenOrder(IList indice, IList objs) + { + int cnt = objs.Count; + for (int i = 0; i < cnt; i++) + { + DisplayObject obj = objs[i]; + if (obj.parent != this) + throw new Exception("Not a child of this container"); + + _children[indice[i]] = obj; + } + InvalidateBatchingState(true); + } + + /// + /// + /// + /// + public IEnumerator GetDescendants(bool backward) + { + return new DescendantsEnumerator(this, backward); + } + + /// + /// + /// + public Rect? clipRect + { + get { return _clipRect; } + set + { + if (_clipRect != value) + { + _clipRect = value; + UpdateBatchingFlags(); + } + } + } + + /// + /// + /// + public DisplayObject mask + { + get { return _mask; } + set + { + if (_mask != value) + { + _mask = value; + _flags |= Flags.BatchingRequested; + UpdateBatchingFlags(); + } + } + } + + /// + /// + /// + public void CreateGraphics() + { + if (graphics == null) + { + graphics = new NGraphics(this.gameObject); + graphics.texture = NTexture.Empty; + } + } + + public override Rect GetBounds(DisplayObject targetSpace) + { + if (_clipRect != null) + return TransformRect((Rect)_clipRect, targetSpace); + + int count = _children.Count; + + Rect rect; + if (count == 0) + { + Vector2 v = TransformPoint(Vector2.zero, targetSpace); + rect = Rect.MinMaxRect(v.x, v.y, 0, 0); + } + else if (count == 1) + { + rect = _children[0].GetBounds(targetSpace); + } + else + { + float minX = float.MaxValue, maxX = float.MinValue; + float minY = float.MaxValue, maxY = float.MinValue; + + for (int i = 0; i < count; ++i) + { + rect = _children[i].GetBounds(targetSpace); + minX = minX < rect.xMin ? minX : rect.xMin; + maxX = maxX > rect.xMax ? maxX : rect.xMax; + minY = minY < rect.yMin ? minY : rect.yMin; + maxY = maxY > rect.yMax ? maxY : rect.yMax; + } + + rect = Rect.MinMaxRect(minX, minY, maxX, maxY); + } + + return rect; + } + + /// + /// + /// + /// + public Camera GetRenderCamera() + { + if (renderMode == RenderMode.ScreenSpaceOverlay) + return StageCamera.main; + else + { + Camera cam = this.renderCamera; + if (cam == null) + { + if (HitTestContext.cachedMainCamera != null) + cam = HitTestContext.cachedMainCamera; + else + { + cam = Camera.main; + if (cam == null) + cam = StageCamera.main; + } + } + return cam; + } + } + + /// + /// + /// + /// + /// + /// + /// + public DisplayObject HitTest(Vector2 stagePoint, bool forTouch) + { + if (StageCamera.main == null) + { + if (this is Stage) + return this; + else + return null; + } + + HitTestContext.screenPoint = new Vector3(stagePoint.x, Screen.height - stagePoint.y, 0); + if (Display.displays.Length > 1) + { + Vector3 p = Display.RelativeMouseAt(HitTestContext.screenPoint); + if (p.x != 0 || p.y != 0) //(p != Vector3.zero) we got (0,0,1) in some unity version, especially on recovering from sleep + HitTestContext.screenPoint = p; + } + HitTestContext.worldPoint = StageCamera.main.ScreenToWorldPoint(HitTestContext.screenPoint); + HitTestContext.direction = Vector3.back; + HitTestContext.forTouch = forTouch; + HitTestContext.camera = StageCamera.main; + + DisplayObject ret = HitTest(); + if (ret != null) + return ret; + else if (this is Stage) + return this; + else + return null; + } + + override protected DisplayObject HitTest() + { + if ((_flags & Flags.UserGameObject) != 0 && !gameObject.activeInHierarchy) + return null; + + if (this.cachedTransform.localScale.x == 0 || this.cachedTransform.localScale.y == 0) + return null; + + Camera savedCamera = HitTestContext.camera; + Vector3 savedWorldPoint = HitTestContext.worldPoint; + Vector3 savedDirection = HitTestContext.direction; + DisplayObject target; + + if (renderMode != RenderMode.ScreenSpaceOverlay || (_flags & Flags.UserGameObject) != 0) + { + Camera cam = GetRenderCamera(); + if (cam.targetDisplay != HitTestContext.screenPoint.z) + return null; + + HitTestContext.camera = cam; + if (renderMode == RenderMode.WorldSpace) + { + Vector3 screenPoint = HitTestContext.camera.WorldToScreenPoint(this.cachedTransform.position); //only for query z value + screenPoint.x = HitTestContext.screenPoint.x; + screenPoint.y = HitTestContext.screenPoint.y; + + //获得本地z轴在世界坐标的方向 + HitTestContext.worldPoint = HitTestContext.camera.ScreenToWorldPoint(screenPoint); + Ray ray = HitTestContext.camera.ScreenPointToRay(screenPoint); + HitTestContext.direction = Vector3.zero - ray.direction; + } + else if (renderMode == RenderMode.ScreenSpaceCamera) + { + HitTestContext.worldPoint = HitTestContext.camera.ScreenToWorldPoint(HitTestContext.screenPoint); + } + } + else + { + if (HitTestContext.camera.targetDisplay != HitTestContext.screenPoint.z && !(this is Stage)) + return null; + } + + target = HitTest_Container(); + + HitTestContext.camera = savedCamera; + HitTestContext.worldPoint = savedWorldPoint; + HitTestContext.direction = savedDirection; + + return target; + } + + DisplayObject HitTest_Container() + { + Vector2 localPoint = WorldToLocal(HitTestContext.worldPoint, HitTestContext.direction); + if (_vertexMatrix != null) + HitTestContext.worldPoint = this.cachedTransform.TransformPoint(new Vector2(localPoint.x, -localPoint.y)); + + if (hitArea != null) + { + if (!hitArea.HitTest(_contentRect, localPoint)) + return null; + + if (hitArea is MeshColliderHitTest) + localPoint = ((MeshColliderHitTest)hitArea).lastHit; + } + else + { + if (_clipRect != null && !((Rect)_clipRect).Contains(localPoint)) + return null; + } + + if (_mask != null) + { + DisplayObject tmp = _mask.InternalHitTestMask(); + if (!reversedMask && tmp == null || reversedMask && tmp != null) + return null; + } + + DisplayObject target = null; + if (touchChildren) + { + int count = _children.Count; + for (int i = count - 1; i >= 0; --i) // front to back! + { + DisplayObject child = _children[i]; + if ((child._flags & Flags.GameObjectDisposed) != 0) + { + child.DisplayDisposedWarning(); + continue; + } + + if (child == _mask || (child._flags & Flags.TouchDisabled) != 0) + continue; + + target = child.InternalHitTest(); + if (target != null) + break; + } + } + + if (target == null && opaque && (hitArea != null || _contentRect.Contains(localPoint))) + target = this; + + return target; + } + + /// + /// + /// + /// + /// + public bool IsAncestorOf(DisplayObject obj) + { + if (obj == null) + return false; + + Container p = obj.parent; + while (p != null) + { + if (p == this) + return true; + + p = p.parent; + } + return false; + } + + /// + /// + /// + public bool fairyBatching + { + get { return (_flags & Flags.FairyBatching) != 0; } + set + { + bool oldValue = (_flags & Flags.FairyBatching) != 0; + if (oldValue != value) + { + if (value) + _flags |= Flags.FairyBatching; + else + _flags &= ~Flags.FairyBatching; + UpdateBatchingFlags(); + } + } + } + + internal void UpdateBatchingFlags() + { + bool oldValue = (_flags & Flags.BatchingRoot) != 0; + bool newValue = (_flags & Flags.FairyBatching) != 0 || _clipRect != null || _mask != null || _paintingMode > 0; + if (newValue) + _flags |= Flags.BatchingRoot; + else + _flags &= ~Flags.BatchingRoot; + if (oldValue != newValue) + { + if (newValue) + _flags |= Flags.BatchingRequested; + else if (_batchElements != null) + _batchElements.Clear(); + + InvalidateBatchingState(); + } + } + + /// + /// + /// + /// + public void InvalidateBatchingState(bool childrenChanged) + { + if (childrenChanged && (_flags & Flags.BatchingRoot) != 0) + _flags |= Flags.BatchingRequested; + else + { + Container p = this.parent; + while (p != null) + { + if ((p._flags & Flags.BatchingRoot) != 0) + { + p._flags |= Flags.BatchingRequested; + break; + } + + p = p.parent; + } + } + } + + /// + /// + /// + /// + public void SetChildrenLayer(int value) + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + DisplayObject child = _children[i]; + if (child._paintingMode > 0) + child.paintingGraphics.gameObject.layer = value; + else + child._SetLayerDirect(value); + if ((child is Container) && child._paintingMode == 0) + ((Container)child).SetChildrenLayer(value); + } + } + + override public void Update(UpdateContext context) + { + if ((_flags & Flags.UserGameObject) != 0 && !gameObject.activeInHierarchy) + return; + + base.Update(context); + + if (_paintingMode != 0) + { + if ((_flags & Flags.CacheAsBitmap) != 0 && _paintingInfo.flag == 2) + { + if (onUpdate != null) + onUpdate(); + return; + } + + context.EnterPaintingMode(); + } + + if (_mask != null) + { + context.EnterClipping(this.id, reversedMask); + if (_mask.graphics != null) + _mask.graphics._PreUpdateMask(context, _mask.id); + } + else if (_clipRect != null) + context.EnterClipping(this.id, this.TransformRect((Rect)_clipRect, null), clipSoftness); + + float savedAlpha = context.alpha; + context.alpha *= this.alpha; + bool savedGrayed = context.grayed; + context.grayed = context.grayed || this.grayed; + + if ((_flags & Flags.FairyBatching) != 0) + context.batchingDepth++; + + if (context.batchingDepth > 0) + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + DisplayObject child = _children[i]; + if ((child._flags & Flags.GameObjectDisposed) != 0) + { + child.DisplayDisposedWarning(); + continue; + } + + if (child.visible) + child.Update(context); + } + } + else + { + if (_mask != null) + _mask.SetRenderingOrder(context, false); + + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + DisplayObject child = _children[i]; + if ((child._flags & Flags.GameObjectDisposed) != 0) + { + child.DisplayDisposedWarning(); + continue; + } + + if (child.visible) + { + if (!(child.graphics != null && child.graphics._maskFlag == 1)) //if not a mask + child.SetRenderingOrder(context, false); + + child.Update(context); + } + } + + if (_mask != null) + { + if (_mask.graphics != null) + _mask.graphics._SetStencilEraserOrder(context.renderingOrder++); + } + } + + if ((_flags & Flags.FairyBatching) != 0) + { + if (context.batchingDepth == 1) + SetRenderingOrderAll(context); + context.batchingDepth--; + } + + context.alpha = savedAlpha; + context.grayed = savedGrayed; + + if (_clipRect != null || _mask != null) + context.LeaveClipping(); + + if (_paintingMode != 0) + { + context.LeavePaintingMode(); + UpdateContext.OnEnd += _paintingInfo.captureDelegate; + } + + if (onUpdate != null) + onUpdate(); + } + + private void SetRenderingOrderAll(UpdateContext context) + { + if ((_flags & Flags.BatchingRequested) != 0) + DoFairyBatching(); + + if (_mask != null) + _mask.SetRenderingOrder(context, false); + + int cnt = _batchElements.Count; + for (int i = 0; i < cnt; i++) + { + BatchElement batchElement = _batchElements[i]; + batchElement.owner.SetRenderingOrder(context, true); + + if (batchElement.isRoot) + ((Container)batchElement.owner).SetRenderingOrderAll(context); + } + + if (_mask != null) + { + if (_mask.graphics != null) + _mask.graphics._SetStencilEraserOrder(context.renderingOrder++); + } + } + + private void DoFairyBatching() + { + _flags &= ~Flags.BatchingRequested; + + if (_batchElements == null) + _batchElements = new List(); + else + _batchElements.Clear(); + CollectChildren(this, false); + + int cnt = _batchElements.Count; + + int i, j, k, m; + object curMat, testMat, lastMat; + BatchElement current, test; + float[] bounds; + for (i = 0; i < cnt; i++) + { + current = _batchElements[i]; + bounds = current.bounds; + curMat = current.material; + if (curMat == null || current.breakBatch) + continue; + + k = -1; + lastMat = null; + m = i; + for (j = i - 1; j >= 0; j--) + { + test = _batchElements[j]; + if (test.breakBatch) + break; + + testMat = test.material; + if (testMat != null) + { + if (lastMat != testMat) + { + lastMat = testMat; + m = j + 1; + } + + if (curMat == testMat) + k = m; + } + + if ((bounds[0] > test.bounds[0] ? bounds[0] : test.bounds[0]) + <= (bounds[2] < test.bounds[2] ? bounds[2] : test.bounds[2]) + && (bounds[1] > test.bounds[1] ? bounds[1] : test.bounds[1]) + <= (bounds[3] < test.bounds[3] ? bounds[3] : test.bounds[3])) + { + if (k == -1) + k = m; + break; + } + } + if (k != -1 && i != k) + { + _batchElements.RemoveAt(i); + _batchElements.Insert(k, current); + } + } + + //Debug.Log("DoFairyBatching " + cnt + "," + this.cachedTransform.GetInstanceID()); + } + + private void CollectChildren(Container initiator, bool outlineChanged) + { + EnsureSizeCorrect(); + int count = _children.Count; + for (int i = 0; i < count; i++) + { + DisplayObject child = _children[i]; + if (!child.visible || child == initiator._mask) + continue; + + bool childOutlineChanged = outlineChanged || (child._flags & Flags.OutlineChanged) != 0; + bool isRoot = (child._flags & Flags.BatchingRoot) != 0; + BatchElement batchElement = child.AddToBatch(initiator._batchElements, isRoot); + if (batchElement != null) + { + batchElement.isRoot = isRoot; + if (childOutlineChanged) + { + Rect rect = child.GetBounds(initiator); + batchElement.bounds[0] = rect.xMin; + batchElement.bounds[1] = rect.yMin; + batchElement.bounds[2] = rect.xMax; + batchElement.bounds[3] = rect.yMax; + child._flags &= ~Flags.OutlineChanged; + } + } + + if (isRoot) + { + if ((child._flags & Flags.BatchingRequested) != 0) + ((Container)child).DoFairyBatching(); + } + else if (child is Container) + ((Container)child).CollectChildren(initiator, childOutlineChanged); + } + } + + public override void Dispose() + { + if ((_flags & Flags.Disposed) != 0) + return; + + base.Dispose(); //Destroy GameObject tree first, avoid destroying each seperately; + + int numChildren = _children.Count; + for (int i = numChildren - 1; i >= 0; --i) + { + DisplayObject obj = _children[i]; + obj.InternalSetParent(null); //Avoid RemoveParent call + obj.Dispose(); + } + } + + /// + /// If true, when the container is focused, tab navigation is lock inside it. + /// + public bool tabStopChildren + { + get { return (_flags & Flags.TabStopChildren) != 0; } + set + { + if (value) + _flags |= Flags.TabStopChildren; + else + _flags &= ~Flags.TabStopChildren; + } + } + + struct DescendantsEnumerator : IEnumerator + { + Container _root; + Container _com; + DisplayObject _current; + int _index; + bool _forward; + + public DescendantsEnumerator(Container root, bool backward) + { + _root = root; + _com = _root; + _current = null; + _forward = !backward; + if (_forward) + _index = 0; + else + _index = _com._children.Count - 1; + } + + public DisplayObject Current + { + get { return _current; } + } + + object IEnumerator.Current + { + get { return _current; } + } + + public bool MoveNext() + { + if (_forward) + { + if (_index >= _com._children.Count) + { + if (_com == _root) + { + _current = null; + return false; + } + + _current = _com; + _com = _com.parent; + _index = _com.GetChildIndex(_current) + 1; + return true; + } + else + { + DisplayObject obj = _com._children[_index]; + if (obj is Container) + { + _com = (Container)obj; + _index = 0; + return MoveNext(); + } + _index++; + _current = obj; + return true; + } + } + else + { + if (_index < 0) + { + if (_com == _root) + { + _current = null; + return false; + } + + _current = _com; + _com = _com.parent; + _index = _com.GetChildIndex(_current) - 1; + return true; + } + else + { + DisplayObject obj = _com._children[_index]; + if (obj is Container) + { + _com = (Container)obj; + _index = _com._children.Count - 1; + return MoveNext(); + } + _index--; + _current = obj; + return true; + } + } + } + + public void Reset() + { + _com = _root; + _current = null; + _index = 0; + } + + public void Dispose() + { + } + } + } + + + public class BatchElement + { + public Material material; + public float[] bounds; + public IBatchable owner; + public bool isRoot; + public bool breakBatch; + + public BatchElement(IBatchable owner, float[] bounds) + { + this.owner = owner; + this.bounds = bounds ?? new float[4]; + } + } + + /// + /// + /// + public interface IBatchable + { + void SetRenderingOrder(UpdateContext context, bool inBatch); + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs.meta new file mode 100644 index 0000000..3c7d5f1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Container.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 531f2c788ec31e7459700f6811410a6f +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs b/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs new file mode 100644 index 0000000..c29b2da --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs @@ -0,0 +1,1921 @@ +using System; +using System.Text; +using UnityEngine; +using FairyGUI.Utils; +using System.Collections.Generic; + +namespace FairyGUI +{ + /// + /// + /// + public class DisplayObject : EventDispatcher, IBatchable + { + /// + /// + /// + public string name; + + /// + /// + /// + public Container parent { get; private set; } + + /// + /// + /// + public GameObject gameObject { get; protected set; } + + /// + /// + /// + public Transform cachedTransform { get; protected set; } + + /// + /// + /// + public NGraphics graphics { get; protected set; } + + /// + /// + /// + public NGraphics paintingGraphics { get; protected set; } + + /// + /// + /// + public event Action onPaint; + + /// + /// + /// + public GObject gOwner; + + /// + /// + /// + public uint id; + + bool _visible; + bool _touchable; + Vector2 _pivot; + Vector3 _pivotOffset; + Vector3 _rotation; //由于万向锁,单独旋转一个轴是会影响到其他轴的,所以这里需要单独保存 + Vector2 _skew; + int _renderingOrder; + float _alpha; + bool _grayed; + BlendMode _blendMode; + IFilter _filter; + Transform _home; + string _cursor; + bool _perspective; + int _focalLength; + Vector3 _pixelPerfectAdjustment; + int _checkPixelPerfect; + + EventListener _onClick; + EventListener _onRightClick; + EventListener _onTouchBegin; + EventListener _onTouchMove; + EventListener _onTouchEnd; + EventListener _onRollOver; + EventListener _onRollOut; + EventListener _onMouseWheel; + EventListener _onAddedToStage; + EventListener _onRemovedFromStage; + EventListener _onKeyDown; + EventListener _onClickLink; + EventListener _onFocusIn; + EventListener _onFocusOut; + + protected internal int _paintingMode; //1-滤镜,2-blendMode,4-transformMatrix, 8-cacheAsBitmap + protected internal PaintingInfo _paintingInfo; + protected Rect _contentRect; + protected NGraphics.VertexMatrix _vertexMatrix; + protected internal Flags _flags; + + internal static uint _gInstanceCounter; + + internal static HideFlags hideFlags = HideFlags.None; + + public DisplayObject() + { + id = _gInstanceCounter++; + + _alpha = 1; + _visible = true; + _touchable = true; + _blendMode = BlendMode.Normal; + _focalLength = 2000; + _flags |= Flags.OutlineChanged; + if (UIConfig.makePixelPerfect) + _flags |= Flags.PixelPerfect; + } + + /// + /// + /// + public EventListener onClick + { + get { return _onClick ?? (_onClick = new EventListener(this, "onClick")); } + } + + /// + /// + /// + public EventListener onRightClick + { + get { return _onRightClick ?? (_onRightClick = new EventListener(this, "onRightClick")); } + } + + /// + /// + /// + public EventListener onTouchBegin + { + get { return _onTouchBegin ?? (_onTouchBegin = new EventListener(this, "onTouchBegin")); } + } + + /// + /// + /// + public EventListener onTouchMove + { + get { return _onTouchMove ?? (_onTouchMove = new EventListener(this, "onTouchMove")); } + } + + /// + /// + /// + public EventListener onTouchEnd + { + get { return _onTouchEnd ?? (_onTouchEnd = new EventListener(this, "onTouchEnd")); } + } + + /// + /// + /// + public EventListener onRollOver + { + get { return _onRollOver ?? (_onRollOver = new EventListener(this, "onRollOver")); } + } + + /// + /// + /// + public EventListener onRollOut + { + get { return _onRollOut ?? (_onRollOut = new EventListener(this, "onRollOut")); } + } + + /// + /// + /// + public EventListener onMouseWheel + { + get { return _onMouseWheel ?? (_onMouseWheel = new EventListener(this, "onMouseWheel")); } + } + + /// + /// + /// + public EventListener onAddedToStage + { + get { return _onAddedToStage ?? (_onAddedToStage = new EventListener(this, "onAddedToStage")); } + } + + /// + /// + /// + public EventListener onRemovedFromStage + { + get { return _onRemovedFromStage ?? (_onRemovedFromStage = new EventListener(this, "onRemovedFromStage")); } + } + + /// + /// + /// + public EventListener onKeyDown + { + get { return _onKeyDown ?? (_onKeyDown = new EventListener(this, "onKeyDown")); } + } + + /// + /// + /// + public EventListener onClickLink + { + get { return _onClickLink ?? (_onClickLink = new EventListener(this, "onClickLink")); } + } + + /// + /// + /// + public EventListener onFocusIn + { + get { return _onFocusIn ?? (_onFocusIn = new EventListener(this, "onFocusIn")); } + } + + /// + /// + /// + public EventListener onFocusOut + { + get { return _onFocusOut ?? (_onFocusOut = new EventListener(this, "onFocusOut")); } + + } + + protected void CreateGameObject(string gameObjectName) + { + gameObject = new GameObject(gameObjectName); + cachedTransform = gameObject.transform; + if (Application.isPlaying) + { + UnityEngine.Object.DontDestroyOnLoad(gameObject); + + DisplayObjectInfo info = gameObject.AddComponent(); + info.displayObject = this; + } + gameObject.hideFlags = DisplayObject.hideFlags; + gameObject.SetActive(false); + } + + protected void SetGameObject(GameObject gameObject) + { + this.gameObject = gameObject; + this.cachedTransform = gameObject.transform; + _rotation = cachedTransform.localEulerAngles; + + _flags |= Flags.UserGameObject; + } + + protected void DestroyGameObject() + { + if ((_flags & Flags.UserGameObject) == 0 && gameObject != null) + { + if (Application.isPlaying) + GameObject.Destroy(gameObject); + else + GameObject.DestroyImmediate(gameObject); + gameObject = null; + cachedTransform = null; + } + } + + /// + /// + /// + public float alpha + { + get { return _alpha; } + set { _alpha = value; } + } + + /// + /// + /// + public bool grayed + { + get { return _grayed; } + set { _grayed = value; } + } + + /// + /// + /// + public bool visible + { + get { return _visible; } + set + { + if (_visible != value) + { + _visible = value; + _flags |= Flags.OutlineChanged; + if (parent != null && _visible) + { + gameObject.SetActive(true); + InvalidateBatchingState(); + if (this is Container) + ((Container)this).InvalidateBatchingState(true); + } + else + gameObject.SetActive(false); + } + } + } + + /// + /// + /// + public float x + { + get { return cachedTransform.localPosition.x; } + set + { + SetPosition(value, -cachedTransform.localPosition.y, cachedTransform.localPosition.z); + } + } + + /// + /// + /// + public float y + { + get { return -cachedTransform.localPosition.y; } + set + { + SetPosition(cachedTransform.localPosition.x, value, cachedTransform.localPosition.z); + } + } + + /// + /// + /// + public float z + { + get { return cachedTransform.localPosition.z; } + set + { + SetPosition(cachedTransform.localPosition.x, -cachedTransform.localPosition.y, value); + } + } + + /// + /// + /// + public Vector2 xy + { + get { return new Vector2(this.x, this.y); } + set { SetPosition(value.x, value.y, cachedTransform.localPosition.z); } + } + + /// + /// + /// + public Vector3 position + { + get { return new Vector3(this.x, this.y, this.z); } + set { SetPosition(value.x, value.y, value.z); } + } + + /// + /// + /// + /// + /// + public void SetXY(float xv, float yv) + { + SetPosition(xv, yv, cachedTransform.localPosition.z); + } + + /// + /// + /// + /// + /// + /// + public void SetPosition(float xv, float yv, float zv) + { + Vector3 v = new Vector3(); + v.x = xv; + v.y = -yv; + v.z = zv; + if (v != cachedTransform.localPosition) + { + cachedTransform.localPosition = v; + _flags |= Flags.OutlineChanged; + if ((_flags & Flags.PixelPerfect) != 0) + { + //总在下一帧再完成PixelPerfect,这样当物体在连续运动时,不会因为PixelPerfect而发生抖动。 + _checkPixelPerfect = Time.frameCount; + _pixelPerfectAdjustment = Vector3.zero; + } + } + } + + /// + /// If the object position is align by pixel + /// + public bool pixelPerfect + { + get { return (_flags & Flags.PixelPerfect) != 0; } + set + { + if (value) + _flags |= Flags.PixelPerfect; + else + _flags &= ~Flags.PixelPerfect; + } + } + + /// + /// + /// + public float width + { + get + { + EnsureSizeCorrect(); + return _contentRect.width; + } + set + { + if (!Mathf.Approximately(value, _contentRect.width)) + { + _contentRect.width = value; + _flags |= Flags.WidthChanged; + _flags &= ~Flags.HeightChanged; + OnSizeChanged(); + } + } + } + + /// + /// + /// + public float height + { + get + { + EnsureSizeCorrect(); + return _contentRect.height; + } + set + { + if (!Mathf.Approximately(value, _contentRect.height)) + { + _contentRect.height = value; + _flags &= ~Flags.WidthChanged; + _flags |= Flags.HeightChanged; + OnSizeChanged(); + } + } + } + + /// + /// + /// + public Vector2 size + { + get + { + EnsureSizeCorrect(); + return _contentRect.size; + } + set + { + SetSize(value.x, value.y); + } + } + + /// + /// + /// + /// + /// + public void SetSize(float wv, float hv) + { + if (!Mathf.Approximately(wv, _contentRect.width)) + _flags |= Flags.WidthChanged; + else + _flags &= ~Flags.WidthChanged; + if (!Mathf.Approximately(hv, _contentRect.height)) + _flags |= Flags.HeightChanged; + else + _flags &= ~Flags.HeightChanged; + + if ((_flags & Flags.WidthChanged) != 0 || (_flags & Flags.HeightChanged) != 0) + { + _contentRect.width = wv; + _contentRect.height = hv; + OnSizeChanged(); + } + } + + virtual public void EnsureSizeCorrect() + { + } + + virtual protected void OnSizeChanged() + { + ApplyPivot(); + + if (_paintingInfo != null) + _paintingInfo.flag = 1; + if (graphics != null) + graphics.contentRect = _contentRect; + _flags |= Flags.OutlineChanged; + } + + /// + /// + /// + public float scaleX + { + get { return cachedTransform.localScale.x; } + set + { + Vector3 v = cachedTransform.localScale; + v.x = v.z = ValidateScale(value); + cachedTransform.localScale = v; + _flags |= Flags.OutlineChanged; + ApplyPivot(); + } + } + + /// + /// + /// + public float scaleY + { + get { return cachedTransform.localScale.y; } + set + { + Vector3 v = cachedTransform.localScale; + v.y = ValidateScale(value); + cachedTransform.localScale = v; + _flags |= Flags.OutlineChanged; + ApplyPivot(); + } + } + + /// + /// + /// + /// + /// + public void SetScale(float xv, float yv) + { + Vector3 v = new Vector3(); + v.x = v.z = ValidateScale(xv); + v.y = ValidateScale(yv); + cachedTransform.localScale = v; + _flags |= Flags.OutlineChanged; + ApplyPivot(); + } + + /// + /// 在scale过小情况(极端情况=0),当使用Transform的坐标变换时,变换到世界,再从世界变换到本地,会由于精度问题造成结果错误。 + /// 这种错误会导致Batching错误,因为Batching会使用缓存的outline。 + /// 这里限制一下scale的最小值作为当前解决方案。 + /// 这个方案并不完美,因为限制了本地scale值并不能保证对世界scale不会过小。 + /// + /// + /// + private float ValidateScale(float value) + { + if (value >= 0 && value < 0.001f) + value = 0.001f; + else if (value < 0 && value > -0.001f) + value = -0.001f; + return value; + } + + /// + /// + /// + public Vector2 scale + { + get { return cachedTransform.localScale; } + set + { + SetScale(value.x, value.y); + } + } + + /// + /// + /// + public float rotation + { + get + { + //和Unity默认的旋转方向相反 + return -_rotation.z; + } + set + { + _rotation.z = -value; + _flags |= Flags.OutlineChanged; + if (_perspective) + UpdateTransformMatrix(); + else + { + cachedTransform.localEulerAngles = _rotation; + ApplyPivot(); + } + } + } + + /// + /// + /// + public float rotationX + { + get + { + return _rotation.x; + } + set + { + _rotation.x = value; + _flags |= Flags.OutlineChanged; + if (_perspective) + UpdateTransformMatrix(); + else + { + cachedTransform.localEulerAngles = _rotation; + ApplyPivot(); + } + } + } + + /// + /// + /// + public float rotationY + { + get + { + return _rotation.y; + } + set + { + _rotation.y = value; + _flags |= Flags.OutlineChanged; + if (_perspective) + UpdateTransformMatrix(); + else + { + cachedTransform.localEulerAngles = _rotation; + ApplyPivot(); + } + } + } + + /// + /// + /// + public Vector2 skew + { + get { return _skew; } + set + { + _skew = value; + _flags |= Flags.OutlineChanged; + + if (!Application.isPlaying) //编辑期间不支持!! + return; + + UpdateTransformMatrix(); + } + } + + /// + /// 当对象处于ScreenSpace,也就是使用正交相机渲染时,对象虽然可以绕X轴或者Y轴旋转,但没有透视效果。设置perspective,可以模拟出透视效果。 + /// + public bool perspective + { + get + { + return _perspective; + } + set + { + if (_perspective != value) + { + _perspective = value; + if (_perspective)//屏蔽Unity自身的旋转变换 + cachedTransform.localEulerAngles = Vector3.zero; + else + cachedTransform.localEulerAngles = _rotation; + + ApplyPivot(); + UpdateTransformMatrix(); + } + } + } + + /// + /// + /// + public int focalLength + { + get { return _focalLength; } + set + { + if (value <= 0) + value = 1; + + _focalLength = value; + if (_vertexMatrix != null) + UpdateTransformMatrix(); + } + } + + void UpdateTransformMatrix() + { + Matrix4x4 matrix = Matrix4x4.identity; + if (_skew.x != 0 || _skew.y != 0) + ToolSet.SkewMatrix(ref matrix, _skew.x, _skew.y); + if (_perspective) + matrix *= Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(_rotation), Vector3.one); + if (matrix.isIdentity) + _vertexMatrix = null; + else if (_vertexMatrix == null) + _vertexMatrix = new NGraphics.VertexMatrix(); + + //组件的transformMatrix是通过paintingMode实现的,因为全部通过矩阵变换的话,和unity自身的变换混杂在一起,无力理清。 + if (_vertexMatrix != null) + { + _vertexMatrix.matrix = matrix; + _vertexMatrix.cameraPos = new Vector3(_pivot.x * _contentRect.width, -_pivot.y * _contentRect.height, _focalLength); + + if (graphics == null) + EnterPaintingMode(4, null); + } + else + { + if (graphics == null) + LeavePaintingMode(4); + } + + if (_paintingMode > 0) + { + paintingGraphics.vertexMatrix = _vertexMatrix; + _paintingInfo.flag = 1; + } + else if (graphics != null) + graphics.vertexMatrix = _vertexMatrix; + + _flags |= Flags.OutlineChanged; + } + + /// + /// + /// + public Vector2 pivot + { + get { return _pivot; } + set + { + Vector3 deltaPivot = new Vector2((value.x - _pivot.x) * _contentRect.width, (_pivot.y - value.y) * _contentRect.height); + Vector3 oldOffset = _pivotOffset; + + _pivot = value; + UpdatePivotOffset(); + Vector3 v = cachedTransform.localPosition; + v += oldOffset - _pivotOffset + deltaPivot; + cachedTransform.localPosition = v; + _flags |= Flags.OutlineChanged; + } + } + + void UpdatePivotOffset() + { + float px = _pivot.x * _contentRect.width; + float py = _pivot.y * _contentRect.height; + + //注意这里不用处理skew,因为在顶点变换里有对pivot的处理 + Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, cachedTransform.localRotation, cachedTransform.localScale); + _pivotOffset = matrix.MultiplyPoint(new Vector3(px, -py, 0)); + + if (_vertexMatrix != null) + _vertexMatrix.cameraPos = new Vector3(_pivot.x * _contentRect.width, -_pivot.y * _contentRect.height, _focalLength); + } + + void ApplyPivot() + { + if (_pivot.x != 0 || _pivot.y != 0) + { + Vector3 oldOffset = _pivotOffset; + + UpdatePivotOffset(); + Vector3 v = cachedTransform.localPosition; + + if ((_flags & Flags.PixelPerfect) != 0) + { + v -= _pixelPerfectAdjustment; + _checkPixelPerfect = Time.frameCount; + _pixelPerfectAdjustment = Vector3.zero; + } + + v += oldOffset - _pivotOffset; + cachedTransform.localPosition = v; + _flags |= Flags.OutlineChanged; + } + } + + /// + /// This is the pivot position + /// + public Vector3 location + { + get + { + Vector3 pos = this.position; + pos.x += _pivotOffset.x; + pos.y -= _pivotOffset.y; + pos.z += _pivotOffset.z; + return pos; + } + + set + { + this.SetPosition(value.x - _pivotOffset.x, value.y + _pivotOffset.y, value.z - _pivotOffset.z); + } + } + + /// + /// + /// + public Material material + { + get + { + if (graphics != null) + return graphics.material; + else + return null; + } + set + { + if (graphics != null) + graphics.material = value; + } + } + + /// + /// + /// + public string shader + { + get + { + if (graphics != null) + return graphics.shader; + else + return null; + } + set + { + if (graphics != null) + graphics.shader = value; + } + } + + /// + /// + /// + public int renderingOrder + { + get + { + return _renderingOrder; + } + } + + virtual public void SetRenderingOrder(UpdateContext context, bool inBatch) + { + if ((_flags & Flags.GameObjectDisposed) != 0) + { + DisplayDisposedWarning(); + return; + } + + _renderingOrder = context.renderingOrder; + if (graphics != null) + graphics.SetRenderingOrder(context, inBatch); + else + context.renderingOrder++; + + if (_paintingMode > 0) + paintingGraphics.renderingOrder = _renderingOrder; + } + + /// + /// + /// + public int layer + { + get + { + if (_paintingMode > 0) + return paintingGraphics.gameObject.layer; + else + return gameObject.layer; + } + set + { + SetLayer(value, false); + } + } + + /// + /// If the object can be focused? + /// + public bool focusable + { + get { return (_flags & Flags.NotFocusable) == 0; } + set + { + if (value) + _flags &= ~Flags.NotFocusable; + else + _flags |= Flags.NotFocusable; + } + } + + /// + /// If the object can be navigated by TAB? + /// + public bool tabStop + { + get { return (_flags & Flags.TabStop) != 0; } + set + { + if (value) + _flags |= Flags.TabStop; + else + _flags &= ~Flags.TabStop; + } + } + + /// + /// If the object focused? + /// + public bool focused + { + get + { + return Stage.inst.focus == this || (this is Container) && ((Container)this).IsAncestorOf(Stage.inst.focus); + } + } + + internal bool _AcceptTab() + { + if (_touchable && _visible + && ((_flags & Flags.TabStop) != 0 || (_flags & Flags.TabStopChildren) != 0) + && (_flags & Flags.NotFocusable) == 0) + { + Stage.inst.SetFocus(this, true); + return true; + } + else + return false; + } + + /// + /// + /// + /// + public string cursor + { + get { return _cursor; } + set + { + _cursor = value; + if (Application.isPlaying + && (this == Stage.inst.touchTarget || (this is Container) && ((Container)this).IsAncestorOf(Stage.inst.touchTarget))) + { + Stage.inst._ChangeCursor(_cursor); + } + } + } + + /// + /// + /// + public bool isDisposed + { + get { return (_flags & Flags.Disposed) != 0 || gameObject == null; } + } + + internal void InternalSetParent(Container value) + { + if (parent != value) + { + if (value == null && (parent._flags & Flags.Disposed) != 0) + parent = value; + else + { + parent = value; + UpdateHierarchy(); + } + _flags |= Flags.OutlineChanged; + } + } + + /// + /// + /// + public Container topmost + { + get + { + DisplayObject currentObject = this; + while (currentObject.parent != null) + currentObject = currentObject.parent; + return currentObject as Container; + } + } + + /// + /// + /// + public Stage stage + { + get + { + return topmost as Stage; + } + } + + /// + /// + /// + public Container worldSpaceContainer + { + get + { + Container wsc = null; + DisplayObject currentObject = this; + while (currentObject.parent != null) + { + if ((currentObject is Container) && ((Container)currentObject).renderMode == RenderMode.WorldSpace) + { + wsc = (Container)currentObject; + break; + } + currentObject = currentObject.parent; + } + + return wsc; + } + } + + /// + /// + /// + public bool touchable + { + get { return _touchable; } + set + { + if (_touchable != value) + { + _touchable = value; + if (this is Container) + { + ColliderHitTest hitArea = ((Container)this).hitArea as ColliderHitTest; + if (hitArea != null) + hitArea.collider.enabled = value; + } + } + } + } + + /// + /// + /// + /// + public bool touchDisabled + { + get { return (_flags & Flags.TouchDisabled) != 0; } + } + + /// + /// 进入绘画模式,整个对象将画到一张RenderTexture上,然后这种贴图将代替原有的显示内容。 + /// 可以在onPaint回调里对这张纹理进行进一步操作,实现特殊效果。 + /// + public void EnterPaintingMode() + { + EnterPaintingMode(16384, null, 1); + } + + /// + /// 进入绘画模式,整个对象将画到一张RenderTexture上,然后这种贴图将代替原有的显示内容。 + /// 可以在onPaint回调里对这张纹理进行进一步操作,实现特殊效果。 + /// 可能有多个地方要求进入绘画模式,这里用requestorId加以区别,取值是1、2、4、8、16以此类推。1024内内部保留。用户自定义的id从1024开始。 + /// + /// 请求者id + /// 纹理四周的留空。如果特殊处理后的内容大于原内容,那么这里的设置可以使纹理扩大。 + public void EnterPaintingMode(int requestorId, Margin? extend) + { + EnterPaintingMode(requestorId, extend, 1); + } + + /// + /// 进入绘画模式,整个对象将画到一张RenderTexture上,然后这种贴图将代替原有的显示内容。 + /// 可以在onPaint回调里对这张纹理进行进一步操作,实现特殊效果。 + /// 可能有多个地方要求进入绘画模式,这里用requestorId加以区别,取值是1、2、4、8、16以此类推。1024内内部保留。用户自定义的id从1024开始。 + /// + /// 请求者id + /// 扩展纹理。如果特殊处理后的内容大于原内容,那么这里的设置可以使纹理扩大。 + /// 附加一个缩放系数 + public void EnterPaintingMode(int requestorId, Margin? extend, float scale) + { + bool first = _paintingMode == 0; + _paintingMode |= requestorId; + if (first) + { + if (_paintingInfo == null) + { + _paintingInfo = new PaintingInfo() + { + captureDelegate = Capture, + scale = 1 + }; + } + + if (paintingGraphics == null) + { + if (graphics == null) + paintingGraphics = new NGraphics(this.gameObject); + else + { + GameObject go = new GameObject(this.gameObject.name + " (Painter)"); + go.layer = this.gameObject.layer; + go.transform.SetParent(cachedTransform, false); + go.hideFlags = DisplayObject.hideFlags; + paintingGraphics = new NGraphics(go); + } + } + else + paintingGraphics.enabled = true; + paintingGraphics.vertexMatrix = null; + + if (this is Container) + { + ((Container)this).SetChildrenLayer(CaptureCamera.hiddenLayer); + ((Container)this).UpdateBatchingFlags(); + } + else + this.InvalidateBatchingState(); + + if (graphics != null) + _SetLayerDirect(CaptureCamera.hiddenLayer); + } + if (extend != null) + _paintingInfo.extend = (Margin)extend; + _paintingInfo.scale = scale; + _paintingInfo.flag = 1; + } + + /// + /// 离开绘画模式 + /// + /// + public void LeavePaintingMode(int requestorId) + { + if (_paintingMode == 0 || (_flags & Flags.Disposed) != 0) + return; + + _paintingMode ^= requestorId; + if (_paintingMode == 0) + { + paintingGraphics.enabled = false; + + if (this is Container) + { + ((Container)this).SetChildrenLayer(this.layer); + ((Container)this).UpdateBatchingFlags(); + } + else + this.InvalidateBatchingState(); + + if (graphics != null) + _SetLayerDirect(paintingGraphics.gameObject.layer); + } + } + + /// + /// + /// + public bool paintingMode + { + get { return _paintingMode > 0; } + } + + /// + /// 将整个显示对象(如果是容器,则容器包含的整个显示列表)静态化,所有内容被缓冲到一张纹理上。 + /// DC将保持为1。CPU消耗将降到最低。但对象的任何变化不会更新。 + /// 当cacheAsBitmap已经为true时,再次调用cacheAsBitmap=true将会刷新对象一次。 + /// + public bool cacheAsBitmap + { + get { return (_flags & Flags.CacheAsBitmap) != 0; } + set + { + if (value) + { + _flags |= Flags.CacheAsBitmap; + EnterPaintingMode(8, null, UIContentScaler.scaleFactor); + } + else + { + _flags &= ~Flags.CacheAsBitmap; + LeavePaintingMode(8); + } + } + } + + /// + /// + /// + /// + /// + /// + public Texture2D GetScreenShot(Margin? extend, float scale) + { + EnterPaintingMode(8, null, scale); + UpdatePainting(); + Capture(); + + Texture2D output; + if (paintingGraphics.texture == null) + output = new Texture2D(1, 1, TextureFormat.RGBA32, false, true); + else + { + RenderTexture rt = (RenderTexture)paintingGraphics.texture.nativeTexture; + output = new Texture2D(rt.width, rt.height, TextureFormat.RGBA32, false, true); + RenderTexture old = RenderTexture.active; + RenderTexture.active = rt; + output.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0); + output.Apply(); + RenderTexture.active = old; + } + + LeavePaintingMode(8); + + return output; + } + + /// + /// + /// + public IFilter filter + { + get + { + return _filter; + } + + set + { + if (!Application.isPlaying) //编辑期间不支持!! + return; + + if (value == _filter) + return; + + if (_filter != null) + _filter.Dispose(); + + if (value != null && value.target != null) + value.target.filter = null; + + _filter = value; + if (_filter != null) + _filter.target = this; + } + } + + /// + /// + /// + public BlendMode blendMode + { + get { return _blendMode; } + set + { + _blendMode = value; + InvalidateBatchingState(); + + if (graphics == null) + { + if (_blendMode != BlendMode.Normal) + { + if (!Application.isPlaying) //Not supported in edit mode! + return; + + EnterPaintingMode(2, null); + paintingGraphics.blendMode = _blendMode; + } + else + LeavePaintingMode(2); + } + else + graphics.blendMode = _blendMode; + } + } + + /// + /// + /// + /// + /// + virtual public Rect GetBounds(DisplayObject targetSpace) + { + EnsureSizeCorrect(); + + if (targetSpace == this) // optimization + { + return _contentRect; + } + else if (targetSpace == parent && _rotation.z == 0) + { + return new Rect(cachedTransform.localPosition.x, -cachedTransform.localPosition.y, + _contentRect.width * cachedTransform.localScale.x, _contentRect.height * cachedTransform.localScale.y); + } + else + return TransformRect(_contentRect, targetSpace); + } + + internal DisplayObject InternalHitTest() + { + if (_visible && (!HitTestContext.forTouch || _touchable)) + return HitTest(); + else + return null; + } + + internal DisplayObject InternalHitTestMask() + { + if (_visible) + return HitTest(); + else + return null; + } + + virtual protected DisplayObject HitTest() + { + Rect rect = GetBounds(this); + if (rect.width == 0 || rect.height == 0) + return null; + + Vector2 localPoint = WorldToLocal(HitTestContext.worldPoint, HitTestContext.direction); + if (rect.Contains(localPoint)) + return this; + else + return null; + } + + /// + /// 将舞台坐标转换为本地坐标 + /// + /// + /// + public Vector2 GlobalToLocal(Vector2 point) + { + Container wsc = this.worldSpaceContainer; + + if (wsc != null)//I am in a world space + { + Camera cam = wsc.GetRenderCamera(); + Vector3 worldPoint; + Vector3 direction; + Vector3 screenPoint = new Vector3(); + screenPoint.x = point.x; + screenPoint.y = Screen.height - point.y; + + if (wsc.hitArea is MeshColliderHitTest) + { + Ray ray = cam.ScreenPointToRay(screenPoint); + RaycastHit hit; + if (((MeshColliderHitTest)wsc.hitArea).collider.Raycast(ray, out hit, 100)) + { + point = new Vector2(hit.textureCoord.x * _contentRect.width, (1 - hit.textureCoord.y) * _contentRect.height); + worldPoint = Stage.inst.cachedTransform.TransformPoint(point.x, -point.y, 0); + direction = Vector3.back; + } + else //当射线没有击中模型时,无法确定本地坐标 + return new Vector2(float.NaN, float.NaN); + } + else + { + screenPoint.z = cam.WorldToScreenPoint(this.cachedTransform.position).z; + worldPoint = cam.ScreenToWorldPoint(screenPoint); + Ray ray = cam.ScreenPointToRay(screenPoint); + direction = Vector3.zero - ray.direction; + } + + return this.WorldToLocal(worldPoint, direction); + } + else //I am in stage space + { + Vector3 worldPoint = Stage.inst.cachedTransform.TransformPoint(point.x, -point.y, 0); + return this.WorldToLocal(worldPoint, Vector3.back); + } + } + + /// + /// 将本地坐标转换为舞台坐标 + /// + /// + /// + public Vector2 LocalToGlobal(Vector2 point) + { + Container wsc = this.worldSpaceContainer; + + Vector3 worldPoint = this.cachedTransform.TransformPoint(point.x, -point.y, 0); + if (wsc != null) + { + if (wsc.hitArea is MeshColliderHitTest) //Not supported for UIPainter, use TransfromPoint instead. + return new Vector2(float.NaN, float.NaN); + + Vector3 screePoint = wsc.GetRenderCamera().WorldToScreenPoint(worldPoint); + return new Vector2(screePoint.x, Stage.inst.size.y - screePoint.y); + } + else + { + point = Stage.inst.cachedTransform.InverseTransformPoint(worldPoint); + point.y = -point.y; + return point; + } + } + + /// + /// 转换世界坐标点到等效的本地xy平面的点。等效的意思是他们在屏幕方向看到的位置一样。 + /// 返回的点是在对象的本地坐标空间,且z=0 + /// + /// + /// + /// + public Vector3 WorldToLocal(Vector3 worldPoint, Vector3 direction) + { + Vector3 localPoint = this.cachedTransform.InverseTransformPoint(worldPoint); + if (localPoint.z != 0) //如果对象绕x轴或y轴旋转过,或者对象是在透视相机,那么z值可能不为0, + { + //将世界坐标的摄影机方向在本地空间上投射,求出与xy平面的交点 + direction = this.cachedTransform.InverseTransformDirection(direction); + float distOnLine = Vector3.Dot(Vector3.zero - localPoint, Vector3.forward) / Vector3.Dot(direction, Vector3.forward); + if (float.IsInfinity(distOnLine)) + return Vector2.zero; + + localPoint = localPoint + direction * distOnLine; + } + else if (_vertexMatrix != null) + { + Vector3 center = _vertexMatrix.cameraPos; + center.z = 0; + center -= _vertexMatrix.matrix.MultiplyPoint(center); + + Matrix4x4 mm = _vertexMatrix.matrix.inverse; + + localPoint -= center; + localPoint = mm.MultiplyPoint(localPoint); + + Vector3 camPos = mm.MultiplyPoint(_vertexMatrix.cameraPos); + Vector3 vec = localPoint - camPos; + float lambda = -camPos.z / vec.z; + localPoint = camPos + lambda * vec; + localPoint.z = 0; + } + localPoint.y = -localPoint.y; + + return localPoint; + } + + /// + /// + /// + /// + /// + public Vector3 LocalToWorld(Vector3 localPoint) + { + localPoint.y = -localPoint.y; + if (_vertexMatrix != null) + { + Vector3 center = _vertexMatrix.cameraPos; + center.z = 0; + center -= _vertexMatrix.matrix.MultiplyPoint(center); + + localPoint = _vertexMatrix.matrix.MultiplyPoint(localPoint); + localPoint += center; + + Vector3 camPos = _vertexMatrix.cameraPos; + Vector3 vec = localPoint - camPos; + float lambda = -camPos.z / vec.z; + localPoint = camPos + lambda * vec; + localPoint.z = 0; + } + + return this.cachedTransform.TransformPoint(localPoint); + } + + /// + /// + /// + /// + /// null if to world space + /// + public Vector2 TransformPoint(Vector2 point, DisplayObject targetSpace) + { + if (targetSpace == this) + return point; + + point = LocalToWorld(point); + if (targetSpace != null) + point = targetSpace.WorldToLocal(point, Vector3.back); + + return point; + } + + /// + /// + /// + /// + /// null if to world space + /// + public Rect TransformRect(Rect rect, DisplayObject targetSpace) + { + if (targetSpace == this) + return rect; + + if (targetSpace == parent && _rotation.z == 0) // optimization + { + Vector3 vec = cachedTransform.localScale; + return new Rect((this.x + rect.x) * vec.x, (this.y + rect.y) * vec.y, + rect.width * vec.x, rect.height * vec.y); + } + else + { + Vector4 vec4 = new Vector4(float.MaxValue, float.MaxValue, float.MinValue, float.MinValue); + + TransformRectPoint(rect.xMin, rect.yMin, targetSpace, ref vec4); + TransformRectPoint(rect.xMax, rect.yMin, targetSpace, ref vec4); + TransformRectPoint(rect.xMin, rect.yMax, targetSpace, ref vec4); + TransformRectPoint(rect.xMax, rect.yMax, targetSpace, ref vec4); + + return Rect.MinMaxRect(vec4.x, vec4.y, vec4.z, vec4.w); + } + } + + protected void TransformRectPoint(float px, float py, DisplayObject targetSpace, ref Vector4 vec4) + { + Vector2 v = TransformPoint(new Vector2(px, py), targetSpace); + + if (vec4.x > v.x) vec4.x = v.x; + if (vec4.z < v.x) vec4.z = v.x; + if (vec4.y > v.y) vec4.y = v.y; + if (vec4.w < v.y) vec4.w = v.y; + } + + /// + /// + /// + public void RemoveFromParent() + { + if (parent != null) + parent.RemoveChild(this); + } + + /// + /// + /// + public void InvalidateBatchingState() + { + if (parent != null) + parent.InvalidateBatchingState(true); + } + + virtual public void Update(UpdateContext context) + { + if (_checkPixelPerfect != 0) + { + if (_rotation == Vector3.zero) + { + Vector3 v = cachedTransform.localPosition; + v.x = Mathf.Round(v.x); + v.y = Mathf.Round(v.y); + _pixelPerfectAdjustment = v - cachedTransform.localPosition; + if (_pixelPerfectAdjustment != Vector3.zero) + cachedTransform.localPosition = v; + } + _checkPixelPerfect = 0; + } + + if (graphics != null) + graphics.Update(context, context.alpha * _alpha, context.grayed | _grayed); + + if (_paintingMode != 0) + { + UpdatePainting(); + + //如果是容器,Capture要等到Container.Update的最后执行,因为容器中可能也有需要Capture的内容,要等他们完成后再进行容器的Capture。 + if (!(this is Container)) + { + if ((_flags & Flags.CacheAsBitmap) == 0 || _paintingInfo.flag != 2) + UpdateContext.OnEnd += _paintingInfo.captureDelegate; + } + + paintingGraphics.Update(context, 1, false); + } + + if (_filter != null) + _filter.Update(); + + Stats.ObjectCount++; + } + + void UpdatePainting() + { + NTexture paintingTexture = paintingGraphics.texture; + if (paintingTexture != null && paintingTexture.disposed) //Texture可能已被Stage.MonitorTexture销毁 + { + paintingTexture = null; + _paintingInfo.flag = 1; + } + + if (_paintingInfo.flag == 1) + { + _paintingInfo.flag = 0; + + //从优化考虑,决定使用绘画模式的容器都需要明确指定大小,而不是自动计算包围。这在UI使用上并没有问题,因为组件总是有固定大小的 + Margin extend = _paintingInfo.extend; + paintingGraphics.contentRect = new Rect(-extend.left, -extend.top, _contentRect.width + extend.left + extend.right, _contentRect.height + extend.top + extend.bottom); + int textureWidth = Mathf.RoundToInt(paintingGraphics.contentRect.width * _paintingInfo.scale); + int textureHeight = Mathf.RoundToInt(paintingGraphics.contentRect.height * _paintingInfo.scale); + if (paintingTexture == null || paintingTexture.width != textureWidth || paintingTexture.height != textureHeight) + { + if (paintingTexture != null) + paintingTexture.Dispose(); + if (textureWidth > 0 && textureHeight > 0) + { + paintingTexture = new NTexture(CaptureCamera.CreateRenderTexture(textureWidth, textureHeight, UIConfig.depthSupportForPaintingMode)); + Stage.inst.MonitorTexture(paintingTexture); + } + else + paintingTexture = null; + paintingGraphics.texture = paintingTexture; + } + } + + if (paintingTexture != null) + paintingTexture.lastActive = Time.time; + } + + void Capture() + { + if (paintingGraphics.texture == null) + return; + + Vector2 offset = new Vector2(_paintingInfo.extend.left, _paintingInfo.extend.top); + CaptureCamera.Capture(this, (RenderTexture)paintingGraphics.texture.nativeTexture, paintingGraphics.contentRect.height, offset); + + _paintingInfo.flag = 2; //2表示已完成一次Capture + if (onPaint != null) + onPaint(); + } + + /// + /// 为对象设置一个默认的父Transform。当对象不在显示列表里时,它的GameObject挂到哪里。 + /// + public Transform home + { + get { return _home; } + set + { + _home = value; + if (value != null && cachedTransform.parent == null) + cachedTransform.SetParent(value, false); + } + } + + void UpdateHierarchy() + { + if ((_flags & Flags.GameObjectDisposed) != 0) + return; + + if ((_flags & Flags.UserGameObject) != 0) + { + //we dont change transform parent of this object + if (gameObject != null) + { + if (parent != null && visible) + gameObject.SetActive(true); + else + gameObject.SetActive(false); + } + } + else if (parent != null) + { + cachedTransform.SetParent(parent.cachedTransform, false); + + if (_visible) + gameObject.SetActive(true); + + int layerValue = parent.gameObject.layer; + if (parent._paintingMode != 0) + layerValue = CaptureCamera.hiddenLayer; + SetLayer(layerValue, true); + } + else if ((_flags & Flags.Disposed) == 0 && this.gameObject != null && !StageEngine.beingQuit) + { + if (Application.isPlaying) + { + if (gOwner == null || gOwner.parent == null)//如果gOwner还有parent的话,说明只是暂时的隐藏 + { + cachedTransform.SetParent(_home, false); + if (_home == null) + UnityEngine.Object.DontDestroyOnLoad(this.gameObject); + } + } + + gameObject.SetActive(false); + } + } + + virtual protected bool SetLayer(int value, bool fromParent) + { + if ((_flags & Flags.LayerSet) != 0) //setted + { + if (fromParent) + return false; + } + else if ((_flags & Flags.LayerFromParent) != 0) //inherit from parent + { + if (!fromParent) + _flags |= Flags.LayerSet; + } + else + { + if (fromParent) + _flags |= Flags.LayerFromParent; + else + _flags |= Flags.LayerSet; + } + + if (_paintingMode > 0) + paintingGraphics.gameObject.layer = value; + else if (gameObject.layer != value) + { + _SetLayerDirect(value); + + if (this is Container) + { + int cnt = ((Container)this).numChildren; + for (int i = 0; i < cnt; i++) + { + DisplayObject child = ((Container)this).GetChildAt(i); + child.SetLayer(value, true); + } + } + } + + return true; + } + + virtual internal void _SetLayerDirect(int value) + { + gameObject.layer = value; + + if (graphics != null && graphics.subInstances != null) + { + foreach (var g in graphics.subInstances) + { + g.gameObject.layer = value; + } + } + } + + virtual public void Dispose() + { + if ((_flags & Flags.Disposed) != 0) + return; + + _flags |= Flags.Disposed; + RemoveFromParent(); + RemoveEventListeners(); + if (graphics != null) + graphics.Dispose(); + if (_filter != null) + _filter.Dispose(); + if (paintingGraphics != null) + { + if (paintingGraphics.texture != null) + paintingGraphics.texture.Dispose(); + + paintingGraphics.Dispose(); + if (paintingGraphics.gameObject != this.gameObject) + { + if (Application.isPlaying) + UnityEngine.Object.Destroy(paintingGraphics.gameObject); + else + UnityEngine.Object.DestroyImmediate(paintingGraphics.gameObject); + } + } + DestroyGameObject(); + } + + internal void DisplayDisposedWarning() + { + if ((_flags & Flags.DisposedWarning) == 0) + { + _flags |= Flags.DisposedWarning; + + StringBuilder sb = new StringBuilder(); + sb.Append("DisplayObject is still in use but GameObject was disposed. ("); + if (gOwner != null) + { + sb.Append("type=").Append(gOwner.GetType().Name).Append(", x=").Append(gOwner.x).Append(", y=").Append(gOwner.y).Append(", name=").Append(gOwner.name); + if (gOwner.packageItem != null) + sb.Append(", res=" + gOwner.packageItem.name); + } + else + { + sb.Append("id=").Append(id).Append(", type=").Append(this.GetType().Name).Append(", name=").Append(name); + } + sb.Append(")"); + Debug.LogError(sb.ToString()); + } + } + + BatchElement _batchElement; + virtual public BatchElement AddToBatch(List batchElements, bool force) + { + if (graphics != null || force) + { + if (_batchElement == null) + _batchElement = new BatchElement(this, null); + _batchElement.material = material; + _batchElement.breakBatch = (_flags & Flags.SkipBatching) != 0; + batchElements.Add(_batchElement); + + if (graphics != null && graphics.subInstances != null) + { + foreach (var g in graphics.subInstances) + { + var m = g.material; + if (m != null) + { + var subBatchElement = g._batchElement; + if (subBatchElement == null) + subBatchElement = new BatchElement(g, _batchElement.bounds); + subBatchElement.material = m; + batchElements.Add(subBatchElement); + } + } + } + + return _batchElement; + } + else + return null; + } + + protected internal class PaintingInfo + { + public Action captureDelegate; //缓存这个delegate,可以防止Capture状态下每帧104B的GC + public Margin extend; + public float scale; + public int flag; + } + + [Flags] + public enum Flags + { + Disposed = 1, + UserGameObject = 2, + TouchDisabled = 4, + OutlineChanged = 8, + UpdatingSize = 0x10, + WidthChanged = 0x20, + HeightChanged = 0x40, + PixelPerfect = 0x80, + LayerSet = 0x100, + LayerFromParent = 0x200, + NotFocusable = 0x400, + TabStop = 0x800, + TabStopChildren = 0x1000, + FairyBatching = 0x2000, + BatchingRequested = 0x4000, + BatchingRoot = 0x8000, + SkipBatching = 0x10000, + CacheAsBitmap = 0x20000, + GameObjectDisposed = 0x40000, + DisposedWarning = 0x80000 + } + } + + /// + /// + /// + public class DisplayObjectInfo : MonoBehaviour + { + /// + /// + /// /// + [System.NonSerialized] + public DisplayObject displayObject; + + private void OnDestroy() + { + if (displayObject != null) + displayObject._flags |= DisplayObject.Flags.GameObjectDisposed; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs.meta new file mode 100644 index 0000000..5a46488 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/DisplayObject.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 24d09ba8cf3faa74f8dcd1c86ad38588 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs b/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs new file mode 100644 index 0000000..f9e082f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs @@ -0,0 +1,404 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace FairyGUI +{ + /// + /// GoWrapper is class for wrapping common gameobject into UI display list. + /// + public class GoWrapper : DisplayObject + { + [Obsolete("No need to manually set this flag anymore, coz it will be handled automatically.")] + public bool supportStencil; + + public event Action onUpdate; + public Action> customCloneMaterials; + public Action customRecoverMaterials; + + protected GameObject _wrapTarget; + protected List _renderers; + protected Dictionary _materialsBackup; + protected Canvas _canvas; + protected bool _cloneMaterial; + protected bool _shouldCloneMaterial; + + protected struct RendererInfo + { + public Renderer renderer; + public Material[] materials; + public int sortingOrder; + } + + protected static List helperTransformList = new List(); + + /// + /// + /// + public GoWrapper() + { + _renderers = new List(); + _materialsBackup = new Dictionary(); + + CreateGameObject("GoWrapper"); + } + + /// + /// + /// + /// 包装对象。 + public GoWrapper(GameObject go) : this() + { + SetWrapTarget(go, false); + } + + /// + /// 设置包装对象。注意如果原来有包装对象,设置新的包装对象后,原来的包装对象只会被删除引用,但不会被销毁。 + /// 对象包含的所有材质不会被复制,如果材质已经是公用的,这可能影响到其他对象。如果希望自动复制,改为使用SetWrapTarget(target, true)设置。 + /// + public GameObject wrapTarget + { + get { return _wrapTarget; } + set { SetWrapTarget(value, false); } + } + + [Obsolete("setWrapTarget is deprecated. Use SetWrapTarget instead.")] + public void setWrapTarget(GameObject target, bool cloneMaterial) + { + SetWrapTarget(target, cloneMaterial); + } + + /// + /// 设置包装对象。注意如果原来有包装对象,设置新的包装对象后,原来的包装对象只会被删除引用,但不会被销毁。 + /// + /// + /// 如果true,则复制材质,否则直接使用sharedMaterial。 + public void SetWrapTarget(GameObject target, bool cloneMaterial) + { + InvalidateBatchingState(); + + RecoverMaterials(); + + _cloneMaterial = cloneMaterial; + if (_wrapTarget != null) + _wrapTarget.transform.SetParent(null, false); + + _canvas = null; + _wrapTarget = target; + _shouldCloneMaterial = false; + _renderers.Clear(); + + if (_wrapTarget != null) + { + _wrapTarget.transform.SetParent(this.cachedTransform, false); + _canvas = _wrapTarget.GetComponent(); + if (_canvas != null) + { + _canvas.renderMode = RenderMode.WorldSpace; + _canvas.worldCamera = StageCamera.main; + _canvas.overrideSorting = true; + + RectTransform rt = _canvas.GetComponent(); + rt.pivot = new Vector2(0, 1); + rt.position = new Vector3(0, 0, 0); + this.SetSize(rt.rect.width, rt.rect.height); + } + else + { + CacheRenderers(); + this.SetSize(0, 0); + } + + SetGoLayers(this.layer); + } + } + + override internal void _SetLayerDirect(int value) + { + gameObject.layer = value; + if (_wrapTarget != null)//这个if是为了在GoWrapper里使用模糊效果 + { + _wrapTarget.layer = value; + foreach (Transform tf in _wrapTarget.GetComponentsInChildren(true)) + { + tf.gameObject.layer = value; + } + } + } + + /// + /// GoWrapper will cache all renderers of your gameobject on constructor. + /// If your gameobject change laterly, call this function to update the cache. + /// GoWrapper会在构造函数里查询你的gameobject所有的Renderer并保存。如果你的gameobject + /// 后续发生了改变,调用这个函数通知GoWrapper重新查询和保存。 + /// + public void CacheRenderers() + { + if (_canvas != null) + return; + + RecoverMaterials(); + _renderers.Clear(); + + Renderer[] items = _wrapTarget.GetComponentsInChildren(true); + + int cnt = items.Length; + _renderers.Capacity = cnt; + for (int i = 0; i < cnt; i++) + { + Renderer r = items[i]; + Material[] mats = r.sharedMaterials; + RendererInfo ri = new RendererInfo() + { + renderer = r, + materials = mats, + sortingOrder = r.sortingOrder + }; + _renderers.Add(ri); + + if (!_cloneMaterial && mats != null + && ((r is SkinnedMeshRenderer) || (r is MeshRenderer))) + { + int mcnt = mats.Length; + for (int j = 0; j < mcnt; j++) + { + Material mat = mats[j]; + if (mat != null && mat.renderQueue != 3000) //Set the object rendering in Transparent Queue as UI objects + mat.renderQueue = 3000; + } + } + } + _renderers.Sort((RendererInfo c1, RendererInfo c2) => + { + return c1.sortingOrder - c2.sortingOrder; + }); + + _shouldCloneMaterial = _cloneMaterial; + } + + void CloneMaterials() + { + _shouldCloneMaterial = false; + + int cnt = _renderers.Count; + for (int i = 0; i < cnt; i++) + { + RendererInfo ri = _renderers[i]; + Material[] mats = ri.materials; + if (mats == null) + continue; + + bool shouldSetRQ = (ri.renderer is SkinnedMeshRenderer) || (ri.renderer is MeshRenderer); + + int mcnt = mats.Length; + for (int j = 0; j < mcnt; j++) + { + Material mat = mats[j]; + if (mat == null) + continue; + + //确保相同的材质不会复制两次 + Material newMat; + if (!_materialsBackup.TryGetValue(mat, out newMat)) + { + newMat = new Material(mat); + _materialsBackup[mat] = newMat; + } + mats[j] = newMat; + + if (shouldSetRQ && mat.renderQueue != 3000) //Set the object rendering in Transparent Queue as UI objects + newMat.renderQueue = 3000; + } + + if (customCloneMaterials != null) + customCloneMaterials.Invoke(_materialsBackup); + else if (ri.renderer != null) + ri.renderer.sharedMaterials = mats; + } + } + + void RecoverMaterials() + { + if (_materialsBackup.Count == 0) + return; + + int cnt = _renderers.Count; + for (int i = 0; i < cnt; i++) + { + RendererInfo ri = _renderers[i]; + if (ri.renderer == null) + continue; + + Material[] mats = ri.materials; + if (mats == null) + continue; + + int mcnt = mats.Length; + for (int j = 0; j < mcnt; j++) + { + Material mat = mats[j]; + + foreach (KeyValuePair kv in _materialsBackup) + { + if (kv.Value == mat) + mats[j] = kv.Key; + } + } + + if (customRecoverMaterials != null) + customRecoverMaterials.Invoke(); + else + ri.renderer.sharedMaterials = mats; + } + + foreach (KeyValuePair kv in _materialsBackup) + Material.DestroyImmediate(kv.Value); + + _materialsBackup.Clear(); + } + + public override void SetRenderingOrder(UpdateContext context, bool inBatch) + { + base.SetRenderingOrder(context, inBatch); + + int value = base.renderingOrder; + + if (_canvas != null) + _canvas.sortingOrder = value; + else + { + int cnt = _renderers.Count; + for (int i = 0; i < cnt; i++) + { + RendererInfo ri = _renderers[i]; + if (ri.renderer != null) + { + if (i != 0 && _renderers[i].sortingOrder != _renderers[i - 1].sortingOrder) + value = context.renderingOrder++; + ri.renderer.sortingOrder = value; + } + } + } + } + + public override BatchElement AddToBatch(List batchElements, bool force) + { + if (this._wrapTarget != null) + { + BatchElement batchElement = base.AddToBatch(batchElements, true); + batchElement.breakBatch = true; + return batchElement; + } + else + return null; + } + + override protected bool SetLayer(int value, bool fromParent) + { + if (base.SetLayer(value, fromParent)) + { + SetGoLayers(value); + return true; + } + else + return false; + } + + protected void SetGoLayers(int layer) + { + if (_wrapTarget == null) + return; + + _wrapTarget.GetComponentsInChildren(true, helperTransformList); + int cnt = helperTransformList.Count; + for (int i = 0; i < cnt; i++) + helperTransformList[i].gameObject.layer = layer; + helperTransformList.Clear(); + } + + override public void Update(UpdateContext context) + { + if (onUpdate != null) + onUpdate(context); + + if (_shouldCloneMaterial) + CloneMaterials(); + + ApplyClipping(context); + + base.Update(context); + } + + private List helperMaterials = new List(); + virtual protected void ApplyClipping(UpdateContext context) + { +#if UNITY_2018_2_OR_NEWER + int cnt = _renderers.Count; + for (int i = 0; i < cnt; i++) + { + Renderer renderer = _renderers[i].renderer; + if (renderer == null) + continue; + + if (customCloneMaterials != null) + helperMaterials.AddRange(_materialsBackup.Values); + else + renderer.GetSharedMaterials(helperMaterials); + + int cnt2 = helperMaterials.Count; + for (int j = 0; j < cnt2; j++) + { + Material mat = helperMaterials[j]; + if (mat != null) + context.ApplyClippingProperties(mat, false); + } + + helperMaterials.Clear(); + } +#else + int cnt = _renderers.Count; + for (int i = 0; i < cnt; i++) + { + Material[] mats = _renderers[i].materials; + if (mats == null) + continue; + + int cnt2 = mats.Length; + for (int j = 0; j < cnt2; j++) + { + Material mat = mats[j]; + if (mat != null) + context.ApplyClippingProperties(mat, false); + } + } +#endif + } + + public override void Dispose() + { + if ((_flags & Flags.Disposed) != 0) + return; + + if (_wrapTarget != null) + { + UnityEngine.Object.Destroy(_wrapTarget); + _wrapTarget = null; + + if (_materialsBackup.Count > 0) + { //如果有备份,说明材质是复制出来的,应该删除 + foreach (KeyValuePair kv in _materialsBackup) + Material.DestroyImmediate(kv.Value); + } + } + + _renderers = null; + _materialsBackup = null; + _canvas = null; + customCloneMaterials = null; + customRecoverMaterials = null; + + base.Dispose(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs.meta new file mode 100644 index 0000000..b6da9eb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/GoWrapper.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 796d0bdebe7368c47adfdf04a1abdfc6 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest.meta new file mode 100644 index 0000000..2f781c2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 736ceb6630254bd42b41568b387cbcbe +folderAsset: yes +timeCreated: 1461773297 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs new file mode 100644 index 0000000..cc7f491 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class ColliderHitTest : IHitTest + { + /// + /// + /// + public Collider collider; + + /// + /// + /// + /// + /// + /// + virtual public bool HitTest(Rect contentRect, Vector2 localPoint) + { + RaycastHit hit; + if (!HitTestContext.GetRaycastHitFromCache(HitTestContext.camera, out hit)) + return false; + + if (hit.collider != collider) + return false; + + return true; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs.meta new file mode 100644 index 0000000..e1da943 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ColliderHitTest.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ffed53edbd969f3439a942ca847cd43d +timeCreated: 1461773299 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs new file mode 100644 index 0000000..df75b74 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class HitTestContext + { + //set before hit test + public static Vector3 screenPoint; + public static Vector3 worldPoint; + public static Vector3 direction; + public static bool forTouch; + public static Camera camera; + + public static int layerMask = -1; + public static float maxDistance = Mathf.Infinity; + + public static Camera cachedMainCamera; + + static Dictionary raycastHits = new Dictionary(); + + /// + /// + /// + /// + /// + /// + public static bool GetRaycastHitFromCache(Camera camera, out RaycastHit hit) + { + RaycastHit? hitRef; + if (!raycastHits.TryGetValue(camera, out hitRef)) + { + Ray ray = camera.ScreenPointToRay(screenPoint); + if (Physics.Raycast(ray, out hit, maxDistance, layerMask)) + { + raycastHits[camera] = hit; + return true; + } + else + { + raycastHits[camera] = null; + return false; + } + } + else if (hitRef == null) + { + hit = new RaycastHit(); + return false; + } + else + { + hit = (RaycastHit)hitRef; + return true; + } + } + + /// + /// + /// + /// + /// + public static void CacheRaycastHit(Camera camera, ref RaycastHit hit) + { + raycastHits[camera] = hit; + } + + /// + /// + /// + public static void ClearRaycastHitCache() + { + raycastHits.Clear(); + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + cachedMainCamera = null; + raycastHits.Clear(); + } +#endif + } + +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs.meta new file mode 100644 index 0000000..e9b2a3b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/HitTestContext.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 19869d6307205b84a81aef6031ba1f33 +timeCreated: 1461750571 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs new file mode 100644 index 0000000..6b57e5f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public enum HitTestMode + { + Default, + Raycast + } + + /// + /// + /// + public interface IHitTest + { + /// + /// + /// + /// + /// + /// + bool HitTest(Rect contentRect, Vector2 localPoint); + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs.meta new file mode 100644 index 0000000..33d2e4c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/IHitTest.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8bbadf82645501c41957c257ab020708 +timeCreated: 1461853133 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs new file mode 100644 index 0000000..00d8644 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs @@ -0,0 +1,43 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class MeshColliderHitTest : ColliderHitTest + { + public Vector2 lastHit; + + /// + /// + /// + /// + public MeshColliderHitTest(MeshCollider collider) + { + this.collider = collider; + } + + /// + /// + /// + /// + /// + /// + override public bool HitTest(Rect contentRect, Vector2 localPoint) + { + RaycastHit hit; + if (!HitTestContext.GetRaycastHitFromCache(HitTestContext.camera, out hit)) + return false; + + if (hit.collider != collider) + return false; + + lastHit = new Vector2(hit.textureCoord.x * contentRect.width, (1 - hit.textureCoord.y) * contentRect.height); + HitTestContext.direction = Vector3.back; + HitTestContext.worldPoint = StageCamera.main.ScreenToWorldPoint(new Vector2(lastHit.x, Screen.height - lastHit.y)); + + return true; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs.meta new file mode 100644 index 0000000..fe7f491 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/MeshColliderHitTest.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6d0a2fa0c7008814795dc7f5f3bd4b19 +timeCreated: 1461750571 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs new file mode 100644 index 0000000..f4a719c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs @@ -0,0 +1,82 @@ +using FairyGUI.Utils; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class PixelHitTestData + { + public int pixelWidth; + public float scale; + public byte[] pixels; + public int pixelsLength; + public int pixelsOffset; + + public void Load(ByteBuffer ba) + { + ba.ReadInt(); + pixelWidth = ba.ReadInt(); + scale = 1.0f / ba.ReadByte(); + pixels = ba.buffer; + pixelsLength = ba.ReadInt(); + pixelsOffset = ba.position; + ba.Skip(pixelsLength); + } + } + + /// + /// + /// + public class PixelHitTest : IHitTest + { + public int offsetX; + public int offsetY; + public float sourceWidth; + public float sourceHeight; + + PixelHitTestData _data; + + /// + /// + /// + /// + /// + /// + public PixelHitTest(PixelHitTestData data, int offsetX, int offsetY, float sourceWidth, float sourceHeight) + { + _data = data; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.sourceWidth = sourceWidth; + this.sourceHeight = sourceHeight; + } + + /// + /// + /// + /// + /// + /// + public bool HitTest(Rect contentRect, Vector2 localPoint) + { + if (!contentRect.Contains(localPoint)) + return false; + + int x = Mathf.FloorToInt((localPoint.x * sourceWidth / contentRect.width - offsetX) * _data.scale); + int y = Mathf.FloorToInt((localPoint.y * sourceHeight / contentRect.height - offsetY) * _data.scale); + if (x < 0 || y < 0 || x >= _data.pixelWidth) + return false; + + int pos = y * _data.pixelWidth + x; + int pos2 = pos / 8; + int pos3 = pos % 8; + + if (pos2 >= 0 && pos2 < _data.pixelsLength) + return ((_data.pixels[_data.pixelsOffset + pos2] >> pos3) & 0x1) > 0; + else + return false; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs.meta new file mode 100644 index 0000000..1ab9143 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/PixelHitTest.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 98cb65df7f5853c4b8e3719a28d4d81f +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs new file mode 100644 index 0000000..80e9f1f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class RectHitTest : IHitTest + { + /// + /// + /// + public Rect rect; + + /// + /// + /// + /// + /// + /// + public bool HitTest(Rect contentRect, Vector2 localPoint) + { + return rect.Contains(localPoint); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs.meta new file mode 100644 index 0000000..3cc4f1d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/RectHitTest.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 92768f03d9b8dea47b1649613c4d0de7 +timeCreated: 1474896442 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs new file mode 100644 index 0000000..08d6cf4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs @@ -0,0 +1,44 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class ShapeHitTest : IHitTest + { + /// + /// + /// + public DisplayObject shape; + + public ShapeHitTest(DisplayObject obj) + { + shape = obj; + } + + /// + /// + /// + /// + /// + /// + public bool HitTest(Rect contentRect, Vector2 localPoint) + { + if (shape.graphics == null) + return false; + + if (shape.parent != null) + { + localPoint = shape.parent.TransformPoint(localPoint, shape); + contentRect.size = shape.size; + } + + IHitTest ht = shape.graphics.meshFactory as IHitTest; + if (ht == null) + return false; + + return ht.HitTest(contentRect, localPoint); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs.meta new file mode 100644 index 0000000..614d509 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/HitTest/ShapeHitTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cd85528f2766431cafc5282f956c060 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs new file mode 100644 index 0000000..3125aa4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs @@ -0,0 +1,436 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class Image : DisplayObject, IMeshFactory + { + protected Rect? _scale9Grid; + protected bool _scaleByTile; + protected Vector2 _textureScale; + protected int _tileGridIndice; + protected FillMesh _fillMesh; + + public Image() : this(null) + { + } + + /// + /// + /// + /// + public Image(NTexture texture) + : base() + { + _flags |= Flags.TouchDisabled; + + CreateGameObject("Image"); + graphics = new NGraphics(gameObject); + graphics.shader = ShaderConfig.imageShader; + graphics.meshFactory = this; + + _textureScale = Vector2.one; + + if (texture != null) + UpdateTexture(texture); + } + + /// + /// + /// + public NTexture texture + { + get { return graphics.texture; } + set + { + UpdateTexture(value); + } + } + + public Vector2 textureScale + { + get { return _textureScale; } + set + { + _textureScale = value; + graphics.SetMeshDirty(); + } + } + + /// + /// + /// + public Color color + { + get + { + return graphics.color; + } + set + { + graphics.color = value; + graphics.Tint(); + } + } + + /// + /// + /// + public FillMethod fillMethod + { + get { return _fillMesh != null ? _fillMesh.method : FillMethod.None; } + set + { + if (_fillMesh == null) + { + if (value == FillMethod.None) + return; + + _fillMesh = new FillMesh(); + } + if (_fillMesh.method != value) + { + _fillMesh.method = value; + graphics.SetMeshDirty(); + } + } + } + + /// + /// + /// + public int fillOrigin + { + get { return _fillMesh != null ? _fillMesh.origin : 0; } + set + { + if (_fillMesh == null) + _fillMesh = new FillMesh(); + + if (_fillMesh.origin != value) + { + _fillMesh.origin = value; + graphics.SetMeshDirty(); + } + } + } + + /// + /// + /// + public bool fillClockwise + { + get { return _fillMesh != null ? _fillMesh.clockwise : true; } + set + { + if (_fillMesh == null) + _fillMesh = new FillMesh(); + + if (_fillMesh.clockwise != value) + { + _fillMesh.clockwise = value; + graphics.SetMeshDirty(); + } + } + } + + /// + /// + /// + public float fillAmount + { + get { return _fillMesh != null ? _fillMesh.amount : 0; } + set + { + if (_fillMesh == null) + _fillMesh = new FillMesh(); + + if (_fillMesh.amount != value) + { + _fillMesh.amount = value; + graphics.SetMeshDirty(); + } + } + } + + /// + /// + /// + public Rect? scale9Grid + { + get { return _scale9Grid; } + set + { + if (_scale9Grid != value) + { + _scale9Grid = value; + graphics.SetMeshDirty(); + } + } + } + + /// + /// + /// + public bool scaleByTile + { + get { return _scaleByTile; } + set + { + if (_scaleByTile != value) + { + _scaleByTile = value; + graphics.SetMeshDirty(); + } + } + } + + /// + /// + /// + public int tileGridIndice + { + get { return _tileGridIndice; } + set + { + if (_tileGridIndice != value) + { + _tileGridIndice = value; + graphics.SetMeshDirty(); + } + } + } + + /// + /// + /// + public void SetNativeSize() + { + if (graphics.texture != null) + SetSize(graphics.texture.width, graphics.texture.height); + else + SetSize(0, 0); + } + + virtual protected void UpdateTexture(NTexture value) + { + if (value == graphics.texture) + return; + + graphics.texture = value; + _textureScale = Vector2.one; + if (_contentRect.width == 0) + SetNativeSize(); + InvalidateBatchingState(); + } + + public void OnPopulateMesh(VertexBuffer vb) + { + if (_fillMesh != null && _fillMesh.method != FillMethod.None) + { + _fillMesh.OnPopulateMesh(vb); + } + else if (_scaleByTile) + { + NTexture texture = graphics.texture; + if (texture.root == texture + && texture.nativeTexture != null + && texture.nativeTexture.wrapMode == TextureWrapMode.Repeat) + { + Rect uvRect = vb.uvRect; + uvRect.width *= vb.contentRect.width / texture.width * _textureScale.x; + uvRect.height *= vb.contentRect.height / texture.height * _textureScale.y; + + vb.AddQuad(vb.contentRect, vb.vertexColor, uvRect); + vb.AddTriangles(); + } + else + { + Rect contentRect = vb.contentRect; + contentRect.width *= _textureScale.x; + contentRect.height *= _textureScale.y; + + TileFill(vb, contentRect, vb.uvRect, texture.width, texture.height); + vb.AddTriangles(); + } + } + else if (_scale9Grid != null) + { + SliceFill(vb); + } + else + graphics.OnPopulateMesh(vb); + } + + static int[] TRIANGLES_9_GRID = new int[] { + 4,0,1,1,5,4, + 5,1,2,2,6,5, + 6,2,3,3,7,6, + 8,4,5,5,9,8, + 9,5,6,6,10,9, + 10,6,7,7,11,10, + 12,8,9,9,13,12, + 13,9,10,10,14,13, + 14,10,11, + 11,15,14 + }; + + static int[] gridTileIndice = new int[] { -1, 0, -1, 2, 4, 3, -1, 1, -1 }; + static float[] gridX = new float[4]; + static float[] gridY = new float[4]; + static float[] gridTexX = new float[4]; + static float[] gridTexY = new float[4]; + + public void SliceFill(VertexBuffer vb) + { + NTexture texture = graphics.texture; + Rect gridRect = (Rect)_scale9Grid; + Rect contentRect = vb.contentRect; + contentRect.width *= _textureScale.x; + contentRect.height *= _textureScale.y; + Rect uvRect = vb.uvRect; + + float sourceW = texture.width; + float sourceH = texture.height; + + if (graphics.flip != FlipType.None) + { + if (graphics.flip == FlipType.Horizontal || graphics.flip == FlipType.Both) + { + gridRect.x = sourceW - gridRect.xMax; + gridRect.xMax = gridRect.x + gridRect.width; + } + + if (graphics.flip == FlipType.Vertical || graphics.flip == FlipType.Both) + { + gridRect.y = sourceH - gridRect.yMax; + gridRect.yMax = gridRect.y + gridRect.height; + } + } + + float sx = uvRect.width / sourceW; + float sy = uvRect.height / sourceH; + float xMax = uvRect.xMax; + float yMax = uvRect.yMax; + float xMax2 = gridRect.xMax; + float yMax2 = gridRect.yMax; + + gridTexX[0] = uvRect.x; + gridTexX[1] = uvRect.x + gridRect.x * sx; + gridTexX[2] = uvRect.x + xMax2 * sx; + gridTexX[3] = xMax; + gridTexY[0] = yMax; + gridTexY[1] = yMax - gridRect.y * sy; + gridTexY[2] = yMax - yMax2 * sy; + gridTexY[3] = uvRect.y; + + if (contentRect.width >= (sourceW - gridRect.width)) + { + gridX[1] = gridRect.x; + gridX[2] = contentRect.width - (sourceW - xMax2); + gridX[3] = contentRect.width; + } + else + { + float tmp = gridRect.x / (sourceW - xMax2); + tmp = contentRect.width * tmp / (1 + tmp); + gridX[1] = tmp; + gridX[2] = tmp; + gridX[3] = contentRect.width; + } + + if (contentRect.height >= (sourceH - gridRect.height)) + { + gridY[1] = gridRect.y; + gridY[2] = contentRect.height - (sourceH - yMax2); + gridY[3] = contentRect.height; + } + else + { + float tmp = gridRect.y / (sourceH - yMax2); + tmp = contentRect.height * tmp / (1 + tmp); + gridY[1] = tmp; + gridY[2] = tmp; + gridY[3] = contentRect.height; + } + + if (_tileGridIndice == 0) + { + for (int cy = 0; cy < 4; cy++) + { + for (int cx = 0; cx < 4; cx++) + vb.AddVert(new Vector2(gridX[cx] / _textureScale.x, gridY[cy] / _textureScale.y), vb.vertexColor, new Vector2(gridTexX[cx], gridTexY[cy])); + } + vb.AddTriangles(TRIANGLES_9_GRID); + } + else + { + Rect drawRect; + Rect texRect; + int row, col; + int part; + + for (int pi = 0; pi < 9; pi++) + { + col = pi % 3; + row = pi / 3; + part = gridTileIndice[pi]; + drawRect = Rect.MinMaxRect(gridX[col], gridY[row], gridX[col + 1], gridY[row + 1]); + texRect = Rect.MinMaxRect(gridTexX[col], gridTexY[row + 1], gridTexX[col + 1], gridTexY[row]); + + if (part != -1 && (_tileGridIndice & (1 << part)) != 0) + { + TileFill(vb, drawRect, texRect, + (part == 0 || part == 1 || part == 4) ? gridRect.width : drawRect.width, + (part == 2 || part == 3 || part == 4) ? gridRect.height : drawRect.height); + } + else + { + drawRect.x /= _textureScale.x; + drawRect.y /= _textureScale.y; + drawRect.width /= _textureScale.x; + drawRect.height /= _textureScale.y; + + vb.AddQuad(drawRect, vb.vertexColor, texRect); + } + } + + vb.AddTriangles(); + } + } + + void TileFill(VertexBuffer vb, Rect contentRect, Rect uvRect, float sourceW, float sourceH) + { + int hc = Mathf.CeilToInt(contentRect.width / sourceW); + int vc = Mathf.CeilToInt(contentRect.height / sourceH); + float tailWidth = contentRect.width - (hc - 1) * sourceW; + float tailHeight = contentRect.height - (vc - 1) * sourceH; + float xMax = uvRect.xMax; + float yMax = uvRect.yMax; + + for (int i = 0; i < hc; i++) + { + for (int j = 0; j < vc; j++) + { + Rect uvTmp = uvRect; + if (i == hc - 1) + uvTmp.xMax = Mathf.Lerp(uvRect.x, xMax, tailWidth / sourceW); + if (j == vc - 1) + uvTmp.yMin = Mathf.Lerp(uvRect.y, yMax, 1 - tailHeight / sourceH); + + Rect drawRect = new Rect(contentRect.x + i * sourceW, contentRect.y + j * sourceH, + i == (hc - 1) ? tailWidth : sourceW, j == (vc - 1) ? tailHeight : sourceH); + + drawRect.x /= _textureScale.x; + drawRect.y /= _textureScale.y; + drawRect.width /= _textureScale.x; + drawRect.height /= _textureScale.y; + + vb.AddQuad(drawRect, vb.vertexColor, uvTmp); + } + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs.meta new file mode 100644 index 0000000..1171036 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Image.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 948ec8822e3c52942bc6e7f6265b264c +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs b/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs new file mode 100644 index 0000000..a60d3cf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs @@ -0,0 +1,243 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace FairyGUI +{ + [Flags] + public enum MaterialFlags + { + Clipped = 1, + SoftClipped = 2, + StencilTest = 4, + AlphaMask = 8, + Grayed = 16, + ColorFilter = 32 + } + + /// + /// Every texture-shader combination has a MaterialManager. + /// + public class MaterialManager + { + public event Action onCreateNewMaterial; + + public bool firstMaterialInFrame; + + NTexture _texture; + Shader _shader; + List _addKeywords; + Dictionary> _materials; + bool _combineTexture; + + class MaterialRef + { + public Material material; + public int frame; + public BlendMode blendMode; + public uint group; + } + + const int internalKeywordsCount = 6; + static string[] internalKeywords = new[] { "CLIPPED", "SOFT_CLIPPED", null, "ALPHA_MASK", "GRAYED", "COLOR_FILTER" }; + + /// + /// + /// + /// + /// + internal MaterialManager(NTexture texture, Shader shader) + { + _texture = texture; + _shader = shader; + _materials = new Dictionary>(); + _combineTexture = texture.alphaTexture != null; + } + + /// + /// + /// + /// + /// + public int GetFlagsByKeywords(IList keywords) + { + if (_addKeywords == null) + _addKeywords = new List(); + + int flags = 0; + for (int i = 0; i < keywords.Count; i++) + { + string s = keywords[i]; + if (string.IsNullOrEmpty(s)) + continue; + int j = _addKeywords.IndexOf(s); + if (j == -1) + { + j = _addKeywords.Count; + _addKeywords.Add(s); + } + flags += (1 << (j + internalKeywordsCount)); + } + + return flags; + } + + /// + /// + /// + /// + /// + /// + /// + public Material GetMaterial(int flags, BlendMode blendMode, uint group) + { + if (blendMode != BlendMode.Normal && BlendModeUtils.Factors[(int)blendMode].pma) + flags |= (int)MaterialFlags.ColorFilter; + + List items; + if (!_materials.TryGetValue(flags, out items)) + { + items = new List(); + _materials[flags] = items; + } + + int frameId = Time.frameCount; + int cnt = items.Count; + MaterialRef result = null; + for (int i = 0; i < cnt; i++) + { + MaterialRef item = items[i]; + + if (item.group == group && item.blendMode == blendMode) + { + if (item.frame != frameId) + { + firstMaterialInFrame = true; + item.frame = frameId; + } + else + firstMaterialInFrame = false; + + if (_combineTexture) + item.material.SetTexture(ShaderConfig.ID_AlphaTex, _texture.alphaTexture); + + return item.material; + } + else if (result == null && (item.frame > frameId || item.frame < frameId - 1)) //collect materials if it is unused in last frame + result = item; + } + + if (result == null) + { + result = new MaterialRef() { material = CreateMaterial(flags) }; + items.Add(result); + } + else if (_combineTexture) + result.material.SetTexture(ShaderConfig.ID_AlphaTex, _texture.alphaTexture); + + if (result.blendMode != blendMode) + { + BlendModeUtils.Apply(result.material, blendMode); + result.blendMode = blendMode; + } + + result.group = group; + result.frame = frameId; + firstMaterialInFrame = true; + return result.material; + } + + /// + /// + /// + /// + Material CreateMaterial(int flags) + { + Material mat = new Material(_shader); + + mat.mainTexture = _texture.nativeTexture; + if (_texture.alphaTexture != null) + { + mat.EnableKeyword("COMBINED"); + mat.SetTexture(ShaderConfig.ID_AlphaTex, _texture.alphaTexture); + } + + for (int i = 0; i < internalKeywordsCount; i++) + { + if ((flags & (1 << i)) != 0) + { + string s = internalKeywords[i]; + if (s != null) + mat.EnableKeyword(s); + } + } + if (_addKeywords != null) + { + int keywordCnt = _addKeywords.Count; + for (int i = 0; i < keywordCnt; i++) + { + if ((flags & (1 << (i + internalKeywordsCount))) != 0) + mat.EnableKeyword(_addKeywords[i]); + } + } + + mat.hideFlags = DisplayObject.hideFlags; + if (onCreateNewMaterial != null) + onCreateNewMaterial(mat); + + return mat; + } + + /// + /// + /// + public void DestroyMaterials() + { + var iter = _materials.GetEnumerator(); + while (iter.MoveNext()) + { + List items = iter.Current.Value; + if (Application.isPlaying) + { + int cnt = items.Count; + for (int j = 0; j < cnt; j++) + Object.Destroy(items[j].material); + } + else + { + int cnt = items.Count; + for (int j = 0; j < cnt; j++) + Object.DestroyImmediate(items[j].material); + } + items.Clear(); + } + iter.Dispose(); + } + + /// + /// + /// + public void RefreshMaterials() + { + _combineTexture = _texture.alphaTexture != null; + var iter = _materials.GetEnumerator(); + while (iter.MoveNext()) + { + List items = iter.Current.Value; + int cnt = items.Count; + for (int j = 0; j < cnt; j++) + { + Material mat = items[j].material; + mat.mainTexture = _texture.nativeTexture; + if (_combineTexture) + { + mat.EnableKeyword("COMBINED"); + mat.SetTexture(ShaderConfig.ID_AlphaTex, _texture.alphaTexture); + } + } + } + iter.Dispose(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs.meta new file mode 100644 index 0000000..ab384f5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/MaterialManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7223c4628e56c1e448c70e10168f5fa1 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh.meta new file mode 100644 index 0000000..4551140 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fca659474d209d94fbded309f407995c +folderAsset: yes +timeCreated: 1545987172 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs new file mode 100644 index 0000000..3578ec4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class CompositeMesh : IMeshFactory, IHitTest + { + /// + /// + /// + public readonly List elements; + + /// + /// If it is -1, means all elements are active, otherwise, only the specific element is active + /// + public int activeIndex; + + public CompositeMesh() + { + elements = new List(); + activeIndex = -1; + } + + public void OnPopulateMesh(VertexBuffer vb) + { + int cnt = elements.Count; + if (cnt == 1) + elements[0].OnPopulateMesh(vb); + else + { + VertexBuffer vb2 = VertexBuffer.Begin(vb); + + for (int i = 0; i < cnt; i++) + { + if (activeIndex == -1 || i == activeIndex) + { + vb2.Clear(); + elements[i].OnPopulateMesh(vb2); + vb.Append(vb2); + } + } + + vb2.End(); + } + } + + public bool HitTest(Rect contentRect, Vector2 point) + { + if (!contentRect.Contains(point)) + return false; + + bool flag = false; + int cnt = elements.Count; + for (int i = 0; i < cnt; i++) + { + if (activeIndex == -1 || i == activeIndex) + { + IHitTest ht = elements[i] as IHitTest; + if (ht != null) + { + if (ht.HitTest(contentRect, point)) + return true; + } + else + flag = true; + } + } + + return flag; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs.meta new file mode 100644 index 0000000..fafc9cf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/CompositeMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ba3d921c1f6e95f4e9105f45fd67bda5 +timeCreated: 1546159121 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs new file mode 100644 index 0000000..2510321 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs @@ -0,0 +1,200 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class EllipseMesh : IMeshFactory, IHitTest + { + /// + /// + /// + public Rect? drawRect; + + /// + /// + /// + public float lineWidth; + + /// + /// + /// + public Color32 lineColor; + + /// + /// + /// + public Color32? centerColor; + + /// + /// + /// + public Color32? fillColor; + + /// + /// + /// + public float startDegree; + + /// + /// + /// + public float endDegreee; + + static int[] SECTOR_CENTER_TRIANGLES = new int[] { + 0, 4, 1, + 0, 3, 4, + 0, 2, 3, + 0, 8, 5, + 0, 7, 8, + 0, 6, 7, + 6, 5, 2, + 2, 1, 6 + }; + + public EllipseMesh() + { + lineColor = Color.black; + startDegree = 0; + endDegreee = 360; + } + + public void OnPopulateMesh(VertexBuffer vb) + { + Rect rect = drawRect != null ? (Rect)drawRect : vb.contentRect; + Color32 color = fillColor != null ? (Color32)fillColor : vb.vertexColor; + + float sectionStart = Mathf.Clamp(startDegree, 0, 360); + float sectionEnd = Mathf.Clamp(endDegreee, 0, 360); + bool clipped = sectionStart > 0 || sectionEnd < 360; + sectionStart = sectionStart * Mathf.Deg2Rad; + sectionEnd = sectionEnd * Mathf.Deg2Rad; + Color32 centerColor2 = centerColor == null ? color : (Color32)centerColor; + + float radiusX = rect.width / 2; + float radiusY = rect.height / 2; + int sides = Mathf.CeilToInt(Mathf.PI * (radiusX + radiusY) / 4); + sides = Mathf.Clamp(sides, 40, 800); + float angleDelta = 2 * Mathf.PI / sides; + float angle = 0; + float lineAngle = 0; + + if (lineWidth > 0 && clipped) + { + lineAngle = lineWidth / Mathf.Max(radiusX, radiusY); + sectionStart += lineAngle; + sectionEnd -= lineAngle; + } + + int vpos = vb.currentVertCount; + float centerX = rect.x + radiusX; + float centerY = rect.y + radiusY; + vb.AddVert(new Vector3(centerX, centerY, 0), centerColor2); + for (int i = 0; i < sides; i++) + { + if (angle < sectionStart) + angle = sectionStart; + else if (angle > sectionEnd) + angle = sectionEnd; + Vector3 vec = new Vector3(Mathf.Cos(angle) * (radiusX - lineWidth) + centerX, Mathf.Sin(angle) * (radiusY - lineWidth) + centerY, 0); + vb.AddVert(vec, color); + if (lineWidth > 0) + { + vb.AddVert(vec, lineColor); + vb.AddVert(new Vector3(Mathf.Cos(angle) * radiusX + centerX, Mathf.Sin(angle) * radiusY + centerY, 0), lineColor); + } + angle += angleDelta; + } + + if (lineWidth > 0) + { + int cnt = sides * 3; + for (int i = 0; i < cnt; i += 3) + { + if (i != cnt - 3) + { + vb.AddTriangle(0, i + 1, i + 4); + vb.AddTriangle(i + 5, i + 2, i + 3); + vb.AddTriangle(i + 3, i + 6, i + 5); + } + else if (!clipped) + { + vb.AddTriangle(0, i + 1, 1); + vb.AddTriangle(2, i + 2, i + 3); + vb.AddTriangle(i + 3, 3, 2); + } + else + { + vb.AddTriangle(0, i + 1, i + 1); + vb.AddTriangle(i + 2, i + 2, i + 3); + vb.AddTriangle(i + 3, i + 3, i + 2); + } + } + } + else + { + for (int i = 0; i < sides; i++) + { + if (i != sides - 1) + vb.AddTriangle(0, i + 1, i + 2); + else if (!clipped) + vb.AddTriangle(0, i + 1, 1); + else + vb.AddTriangle(0, i + 1, i + 1); + } + } + + if (lineWidth > 0 && clipped) + { + //扇形内边缘的线条 + + vb.AddVert(new Vector3(radiusX, radiusY, 0), lineColor); + float centerRadius = lineWidth * 0.5f; + + sectionStart -= lineAngle; + angle = sectionStart + lineAngle * 0.5f + Mathf.PI * 0.5f; + vb.AddVert(new Vector3(Mathf.Cos(angle) * centerRadius + radiusX, Mathf.Sin(angle) * centerRadius + radiusY, 0), lineColor); + angle -= Mathf.PI; + vb.AddVert(new Vector3(Mathf.Cos(angle) * centerRadius + radiusX, Mathf.Sin(angle) * centerRadius + radiusY, 0), lineColor); + vb.AddVert(new Vector3(Mathf.Cos(sectionStart) * radiusX + radiusX, Mathf.Sin(sectionStart) * radiusY + radiusY, 0), lineColor); + vb.AddVert(vb.GetPosition(vpos + 3), lineColor); + + sectionEnd += lineAngle; + angle = sectionEnd - lineAngle * 0.5f + Mathf.PI * 0.5f; + vb.AddVert(new Vector3(Mathf.Cos(angle) * centerRadius + radiusX, Mathf.Sin(angle) * centerRadius + radiusY, 0), lineColor); + angle -= Mathf.PI; + vb.AddVert(new Vector3(Mathf.Cos(angle) * centerRadius + radiusX, Mathf.Sin(angle) * centerRadius + radiusY, 0), lineColor); + vb.AddVert(vb.GetPosition(vpos + sides * 3), lineColor); + vb.AddVert(new Vector3(Mathf.Cos(sectionEnd) * radiusX + radiusX, Mathf.Sin(sectionEnd) * radiusY + radiusY, 0), lineColor); + + vb.AddTriangles(SECTOR_CENTER_TRIANGLES, sides * 3 + 1); + } + } + + public bool HitTest(Rect contentRect, Vector2 point) + { + if (!contentRect.Contains(point)) + return false; + + float radiusX = contentRect.width * 0.5f; + float raduisY = contentRect.height * 0.5f; + float xx = point.x - radiusX - contentRect.x; + float yy = point.y - raduisY - contentRect.y; + if (Mathf.Pow(xx / radiusX, 2) + Mathf.Pow(yy / raduisY, 2) < 1) + { + if (startDegree != 0 || endDegreee != 360) + { + float deg = Mathf.Atan2(yy, xx) * Mathf.Rad2Deg; + if (deg < 0) + deg += 360; + return deg >= startDegree && deg <= endDegreee; + } + else + return true; + } + + return false; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs.meta new file mode 100644 index 0000000..4433dff --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/EllipseMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7ea96854995120948847301fb48d1675 +timeCreated: 1545987173 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs new file mode 100644 index 0000000..85c8960 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs @@ -0,0 +1,400 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class FillMesh : IMeshFactory + { + /// + /// + /// + public FillMethod method; + + /// + /// + /// + public int origin; + + /// + /// + /// + public float amount; + + /// + /// + /// + public bool clockwise; + + public FillMesh() + { + clockwise = true; + amount = 1; + } + + public void OnPopulateMesh(VertexBuffer vb) + { + float amount = Mathf.Clamp01(this.amount); + switch (method) + { + case FillMethod.Horizontal: + FillHorizontal(vb, vb.contentRect, origin, amount); + break; + + case FillMethod.Vertical: + FillVertical(vb, vb.contentRect, origin, amount); + break; + + case FillMethod.Radial90: + FillRadial90(vb, vb.contentRect, (Origin90)origin, amount, clockwise); + break; + + case FillMethod.Radial180: + FillRadial180(vb, vb.contentRect, (Origin180)origin, amount, clockwise); + break; + + case FillMethod.Radial360: + FillRadial360(vb, vb.contentRect, (Origin360)origin, amount, clockwise); + break; + } + } + + static void FillHorizontal(VertexBuffer vb, Rect vertRect, int origin, float amount) + { + float a = vertRect.width * amount; + if ((OriginHorizontal)origin == OriginHorizontal.Right || (OriginVertical)origin == OriginVertical.Bottom) + vertRect.x += (vertRect.width - a); + vertRect.width = a; + + vb.AddQuad(vertRect); + vb.AddTriangles(); + } + + static void FillVertical(VertexBuffer vb, Rect vertRect, int origin, float amount) + { + float a = vertRect.height * amount; + if ((OriginHorizontal)origin == OriginHorizontal.Right || (OriginVertical)origin == OriginVertical.Bottom) + vertRect.y += (vertRect.height - a); + vertRect.height = a; + + vb.AddQuad(vertRect); + vb.AddTriangles(); + } + + //4 vertex + static void FillRadial90(VertexBuffer vb, Rect vertRect, Origin90 origin, float amount, bool clockwise) + { + bool flipX = origin == Origin90.TopRight || origin == Origin90.BottomRight; + bool flipY = origin == Origin90.BottomLeft || origin == Origin90.BottomRight; + if (flipX != flipY) + clockwise = !clockwise; + + float ratio = clockwise ? amount : (1 - amount); + float tan = Mathf.Tan(Mathf.PI * 0.5f * ratio); + bool thresold = false; + if (ratio != 1) + thresold = (vertRect.height / vertRect.width - tan) > 0; + if (!clockwise) + thresold = !thresold; + float x = vertRect.x + (ratio == 0 ? float.MaxValue : (vertRect.height / tan)); + float y = vertRect.y + (ratio == 1 ? float.MaxValue : (vertRect.width * tan)); + float x2 = x; + float y2 = y; + if (flipX) + x2 = vertRect.width - x; + if (flipY) + y2 = vertRect.height - y; + float xMin = flipX ? (vertRect.width - vertRect.x) : vertRect.xMin; + float yMin = flipY ? (vertRect.height - vertRect.y) : vertRect.yMin; + float xMax = flipX ? -vertRect.xMin : vertRect.xMax; + float yMax = flipY ? -vertRect.yMin : vertRect.yMax; + + vb.AddVert(new Vector3(xMin, yMin, 0)); + + if (clockwise) + vb.AddVert(new Vector3(xMax, yMin, 0)); + + if (y > vertRect.yMax) + { + if (thresold) + vb.AddVert(new Vector3(x2, yMax, 0)); + else + vb.AddVert(new Vector3(xMax, yMax, 0)); + } + else + vb.AddVert(new Vector3(xMax, y2, 0)); + + if (x > vertRect.xMax) + { + if (thresold) + vb.AddVert(new Vector3(xMax, y2, 0)); + else + vb.AddVert(new Vector3(xMax, yMax, 0)); + } + else + vb.AddVert(new Vector3(x2, yMax, 0)); + + if (!clockwise) + vb.AddVert(new Vector3(xMin, yMax, 0)); + + if (flipX == flipY) + { + vb.AddTriangle(0, 1, 2); + vb.AddTriangle(0, 2, 3); + } + else + { + vb.AddTriangle(2, 1, 0); + vb.AddTriangle(3, 2, 0); + } + } + + //8 vertex + static void FillRadial180(VertexBuffer vb, Rect vertRect, Origin180 origin, float amount, bool clockwise) + { + switch (origin) + { + case Origin180.Top: + if (amount <= 0.5f) + { + vertRect.width /= 2; + if (clockwise) + vertRect.x += vertRect.width; + + FillRadial90(vb, vertRect, clockwise ? Origin90.TopLeft : Origin90.TopRight, amount / 0.5f, clockwise); + Vector3 vec = vb.GetPosition(-4); + vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); + vb.AddTriangles(-4); + } + else + { + vertRect.width /= 2; + if (!clockwise) + vertRect.x += vertRect.width; + + FillRadial90(vb, vertRect, clockwise ? Origin90.TopRight : Origin90.TopLeft, (amount - 0.5f) / 0.5f, clockwise); + + if (clockwise) + vertRect.x += vertRect.width; + else + vertRect.x -= vertRect.width; + vb.AddQuad(vertRect); + vb.AddTriangles(-4); + } + break; + + case Origin180.Bottom: + if (amount <= 0.5f) + { + vertRect.width /= 2; + if (!clockwise) + vertRect.x += vertRect.width; + + FillRadial90(vb, vertRect, clockwise ? Origin90.BottomRight : Origin90.BottomLeft, amount / 0.5f, clockwise); + Vector3 vec = vb.GetPosition(-4); + vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); + vb.AddTriangles(-4); + } + else + { + vertRect.width /= 2; + if (clockwise) + vertRect.x += vertRect.width; + + FillRadial90(vb, vertRect, clockwise ? Origin90.BottomLeft : Origin90.BottomRight, (amount - 0.5f) / 0.5f, clockwise); + + if (clockwise) + vertRect.x -= vertRect.width; + else + vertRect.x += vertRect.width; + vb.AddQuad(vertRect); + vb.AddTriangles(-4); + } + break; + + case Origin180.Left: + if (amount <= 0.5f) + { + vertRect.height /= 2; + if (!clockwise) + vertRect.y += vertRect.height; + + FillRadial90(vb, vertRect, clockwise ? Origin90.BottomLeft : Origin90.TopLeft, amount / 0.5f, clockwise); + Vector3 vec = vb.GetPosition(-4); + vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); + vb.AddTriangles(-4); + } + else + { + vertRect.height /= 2; + if (clockwise) + vertRect.y += vertRect.height; + + FillRadial90(vb, vertRect, clockwise ? Origin90.TopLeft : Origin90.BottomLeft, (amount - 0.5f) / 0.5f, clockwise); + + if (clockwise) + vertRect.y -= vertRect.height; + else + vertRect.y += vertRect.height; + vb.AddQuad(vertRect); + vb.AddTriangles(-4); + } + break; + + case Origin180.Right: + if (amount <= 0.5f) + { + vertRect.height /= 2; + if (clockwise) + vertRect.y += vertRect.height; + + FillRadial90(vb, vertRect, clockwise ? Origin90.TopRight : Origin90.BottomRight, amount / 0.5f, clockwise); + Vector3 vec = vb.GetPosition(-4); + vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); + vb.AddTriangles(-4); + } + else + { + vertRect.height /= 2; + if (!clockwise) + vertRect.y += vertRect.height; + + FillRadial90(vb, vertRect, clockwise ? Origin90.BottomRight : Origin90.TopRight, (amount - 0.5f) / 0.5f, clockwise); + + if (clockwise) + vertRect.y += vertRect.height; + else + vertRect.y -= vertRect.height; + vb.AddQuad(vertRect); + vb.AddTriangles(-4); + } + break; + } + } + + //12 vertex + static void FillRadial360(VertexBuffer vb, Rect vertRect, Origin360 origin, float amount, bool clockwise) + { + switch (origin) + { + case Origin360.Top: + if (amount < 0.5f) + { + vertRect.width /= 2; + if (clockwise) + vertRect.x += vertRect.width; + + FillRadial180(vb, vertRect, clockwise ? Origin180.Left : Origin180.Right, amount / 0.5f, clockwise); + Vector3 vec = vb.GetPosition(-8); + vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); + vb.AddTriangles(-4); + } + else + { + vertRect.width /= 2; + if (!clockwise) + vertRect.x += vertRect.width; + + FillRadial180(vb, vertRect, clockwise ? Origin180.Right : Origin180.Left, (amount - 0.5f) / 0.5f, clockwise); + + if (clockwise) + vertRect.x += vertRect.width; + else + vertRect.x -= vertRect.width; + vb.AddQuad(vertRect); + vb.AddTriangles(-4); + } + + break; + + case Origin360.Bottom: + if (amount < 0.5f) + { + vertRect.width /= 2; + if (!clockwise) + vertRect.x += vertRect.width; + + FillRadial180(vb, vertRect, clockwise ? Origin180.Right : Origin180.Left, amount / 0.5f, clockwise); + Vector3 vec = vb.GetPosition(-8); + vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); + vb.AddTriangles(-4); + } + else + { + vertRect.width /= 2; + if (clockwise) + vertRect.x += vertRect.width; + + FillRadial180(vb, vertRect, clockwise ? Origin180.Left : Origin180.Right, (amount - 0.5f) / 0.5f, clockwise); + + if (clockwise) + vertRect.x -= vertRect.width; + else + vertRect.x += vertRect.width; + vb.AddQuad(vertRect); + vb.AddTriangles(-4); + } + break; + + case Origin360.Left: + if (amount < 0.5f) + { + vertRect.height /= 2; + if (!clockwise) + vertRect.y += vertRect.height; + + FillRadial180(vb, vertRect, clockwise ? Origin180.Bottom : Origin180.Top, amount / 0.5f, clockwise); + Vector3 vec = vb.GetPosition(-8); + vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); + vb.AddTriangles(-4); + } + else + { + vertRect.height /= 2; + if (clockwise) + vertRect.y += vertRect.height; + + FillRadial180(vb, vertRect, clockwise ? Origin180.Top : Origin180.Bottom, (amount - 0.5f) / 0.5f, clockwise); + + if (clockwise) + vertRect.y -= vertRect.height; + else + vertRect.y += vertRect.height; + vb.AddQuad(vertRect); + vb.AddTriangles(-4); + } + break; + + case Origin360.Right: + if (amount < 0.5f) + { + vertRect.height /= 2; + if (clockwise) + vertRect.y += vertRect.height; + + FillRadial180(vb, vertRect, clockwise ? Origin180.Top : Origin180.Bottom, amount / 0.5f, clockwise); + Vector3 vec = vb.GetPosition(-8); + vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); + vb.AddTriangles(-4); + } + else + { + vertRect.height /= 2; + if (!clockwise) + vertRect.y += vertRect.height; + + FillRadial180(vb, vertRect, clockwise ? Origin180.Bottom : Origin180.Top, (amount - 0.5f) / 0.5f, clockwise); + + if (clockwise) + vertRect.y += vertRect.height; + else + vertRect.y -= vertRect.height; + vb.AddQuad(vertRect); + vb.AddTriangles(-4); + } + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs.meta new file mode 100644 index 0000000..e1a993b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/FillMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8b37d56dc1840734a8fdb4971f5bc733 +timeCreated: 1545987173 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs new file mode 100644 index 0000000..2da619a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs @@ -0,0 +1,179 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// Inspired by kim ki won (http://mypi.ruliweb.daum.net/mypi.htm?id=newtypekorea) + /// + public class LineMesh : IMeshFactory + { + /// + /// + /// + public GPath path; + + /// + /// + /// + public float lineWidth; + + /// + /// + /// + public AnimationCurve lineWidthCurve; + + /// + /// + /// + public Gradient gradient; + + /// + /// + /// + public bool roundEdge; + + /// + /// + /// + public float fillStart; + + /// + /// + /// + public float fillEnd; + + /// + /// + /// + public float pointDensity; + + /// + /// + /// + public bool repeatFill; + + static List points = new List(); + static List ts = new List(); + + public LineMesh() + { + path = new GPath(); + lineWidth = 2; + fillStart = 0; + fillEnd = 1; + pointDensity = 0.1f; + } + + public void OnPopulateMesh(VertexBuffer vb) + { + Vector2 uvMin = vb.uvRect.position; + Vector2 uvMax = new Vector2(vb.uvRect.xMax, vb.uvRect.yMax); + float uvRatio = path.length / vb.textureSize.x; + + int segCount = path.segmentCount; + float t = 0; + float lw = lineWidth; + float u; + for (int si = 0; si < segCount; si++) + { + float ratio = path.GetSegmentLength(si) / path.length; + float t0 = Mathf.Clamp(fillStart - t, 0, ratio) / ratio; + float t1 = Mathf.Clamp(fillEnd - t, 0, ratio) / ratio; + if (t0 >= t1) + { + t += ratio; + continue; + } + + points.Clear(); + ts.Clear(); + path.GetPointsInSegment(si, t0, t1, points, ts, pointDensity); + int cnt = points.Count; + + Color c0 = vb.vertexColor; + Color c1 = vb.vertexColor; + if (gradient != null) + c0 = gradient.Evaluate(t); + if (lineWidthCurve != null) + lw = lineWidthCurve.Evaluate(t); + + if (roundEdge && si == 0 && t0 == 0) + DrawRoundEdge(vb, points[0], points[1], lw, c0, uvMin); + + int vertCount = vb.currentVertCount; + for (int i = 1; i < cnt; i++) + { + Vector3 p0 = points[i - 1]; + Vector3 p1 = points[i]; + int k = vertCount + (i - 1) * 2; + float tc = t + ratio * ts[i]; + + Vector3 lineVector = p1 - p0; + Vector3 widthVector = Vector3.Cross(lineVector, new Vector3(0, 0, 1)); + widthVector.Normalize(); + + if (i == 1) + { + if (repeatFill) + u = tc * uvRatio * uvMax.x; + else + u = Mathf.Lerp(uvMin.x, uvMax.x, t + ratio * ts[i - 1]); + vb.AddVert(p0 - widthVector * lw * 0.5f, c0, new Vector2(u, uvMax.y)); + vb.AddVert(p0 + widthVector * lw * 0.5f, c0, new Vector2(u, uvMin.y)); + + if (si != 0) //joint + { + vb.AddTriangle(k - 2, k - 1, k + 1); + vb.AddTriangle(k - 2, k + 1, k); + } + } + if (gradient != null) + c1 = gradient.Evaluate(tc); + + if (lineWidthCurve != null) + lw = lineWidthCurve.Evaluate(tc); + + if (repeatFill) + u = tc * uvRatio * uvMax.x; + else + u = Mathf.Lerp(uvMin.x, uvMax.x, tc); + vb.AddVert(p1 - widthVector * lw * 0.5f, c1, new Vector2(u, uvMax.y)); + vb.AddVert(p1 + widthVector * lw * 0.5f, c1, new Vector2(u, uvMin.y)); + + vb.AddTriangle(k, k + 1, k + 3); + vb.AddTriangle(k, k + 3, k + 2); + } + + if (roundEdge && si == segCount - 1 && t1 == 1) + DrawRoundEdge(vb, points[cnt - 1], points[cnt - 2], lw, c1, uvMax); + + t += ratio; + } + } + + void DrawRoundEdge(VertexBuffer vb, Vector2 p0, Vector2 p1, float lw, Color32 color, Vector2 uv) + { + Vector2 widthVector = Vector3.Cross(p0 - p1, new Vector3(0, 0, 1)); + widthVector.Normalize(); + widthVector = widthVector * lw / 2f; + Vector2 lineVector = (p0 - p1).normalized * lw / 2f; + + int sides = Mathf.CeilToInt(Mathf.PI * lw / 2); + if (sides < 6) + sides = 6; + int current = vb.currentVertCount; + float angleUnit = Mathf.PI / (sides - 1); + + vb.AddVert(p0, color, uv); + vb.AddVert(p0 + widthVector, color, uv); + + for (int n = 0; n < sides; n++) + { + vb.AddVert(p0 + Mathf.Cos(angleUnit * n) * widthVector + Mathf.Sin(angleUnit * n) * lineVector, color, uv); + vb.AddTriangle(current, current + 1 + n, current + 2 + n); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs.meta new file mode 100644 index 0000000..70ddf45 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/LineMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6d1935a924fabf74a92c72b22a042279 +timeCreated: 1546519483 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs new file mode 100644 index 0000000..ce688ab --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs @@ -0,0 +1,15 @@ + +namespace FairyGUI +{ + /// + /// + /// + public interface IMeshFactory + { + /// + /// + /// + /// + void OnPopulateMesh(VertexBuffer vb); + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs.meta new file mode 100644 index 0000000..bdbc047 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/MeshFactory.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 274275eaa3fbbc94697cbe90a0fb52f1 +timeCreated: 1545987172 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs new file mode 100644 index 0000000..4062bf8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class PlaneMesh : IMeshFactory + { + public int gridSize = 30; + + public void OnPopulateMesh(VertexBuffer vb) + { + float w = vb.contentRect.width; + float h = vb.contentRect.height; + float xMax = vb.contentRect.xMax; + float yMax = vb.contentRect.yMax; + int hc = (int)Mathf.Min(Mathf.CeilToInt(w / gridSize), 9); + int vc = (int)Mathf.Min(Mathf.CeilToInt(h / gridSize), 9); + int eachPartX = Mathf.FloorToInt(w / hc); + int eachPartY = Mathf.FloorToInt(h / vc); + float x, y; + for (int i = 0; i <= vc; i++) + { + if (i == vc) + y = yMax; + else + y = vb.contentRect.y + i * eachPartY; + for (int j = 0; j <= hc; j++) + { + if (j == hc) + x = xMax; + else + x = vb.contentRect.x + j * eachPartX; + vb.AddVert(new Vector3(x, y, 0)); + } + } + + for (int i = 0; i < vc; i++) + { + int k = i * (hc + 1); + for (int j = 1; j <= hc; j++) + { + int m = k + j; + vb.AddTriangle(m - 1, m, m + hc); + vb.AddTriangle(m, m + hc + 1, m + hc); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs.meta new file mode 100644 index 0000000..2b88f1d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PlaneMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 121b756a7a8240c49b63fa9de560691a +timeCreated: 1547970144 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs new file mode 100644 index 0000000..006e756 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs @@ -0,0 +1,291 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class PolygonMesh : IMeshFactory, IHitTest + { + /// + /// points must be in clockwise order, and must start from bottom-left if stretchUV is set. + /// + public readonly List points; + + /// + /// if you dont want to provide uv, leave it empty. + /// + public readonly List texcoords; + + /// + /// + /// + public float lineWidth; + + /// + /// + /// + public Color32 lineColor; + + /// + /// + /// + public Color32? fillColor; + + /// + /// + /// + public Color32[] colors; + + /// + /// + /// + public bool usePercentPositions; + + static List sRestIndices = new List(); + + public PolygonMesh() + { + points = new List(); + texcoords = new List(); + } + + /// + /// + /// + /// + public void Add(Vector2 point) + { + points.Add(point); + } + + /// + /// + /// + /// + /// + public void Add(Vector2 point, Vector2 texcoord) + { + points.Add(point); + texcoords.Add(texcoord); + } + + public void OnPopulateMesh(VertexBuffer vb) + { + int numVertices = points.Count; + if (numVertices < 3) + return; + + int restIndexPos, numRestIndices; + Color32 color = fillColor != null ? (Color32)fillColor : vb.vertexColor; + + float w = vb.contentRect.width; + float h = vb.contentRect.height; + bool useTexcoords = texcoords.Count >= numVertices; + bool fullUV = true; + for (int i = 0; i < numVertices; i++) + { + Vector3 vec = new Vector3(points[i].x, points[i].y, 0); + if (usePercentPositions) + { + vec.x *= w; + vec.y *= h; + } + if (useTexcoords) + { + Vector2 uv = texcoords[i]; + if (uv.x != 0 && uv.x != 1 || uv.y != 0 && uv.y != 1) + fullUV = false; + uv.x = Mathf.Lerp(vb.uvRect.x, vb.uvRect.xMax, uv.x); + uv.y = Mathf.Lerp(vb.uvRect.y, vb.uvRect.yMax, uv.y); + vb.AddVert(vec, color, uv); + } + else + vb.AddVert(vec, color); + } + + if (useTexcoords && fullUV && numVertices == 4) + vb._isArbitraryQuad = true; + + // Algorithm "Ear clipping method" described here: + // -> https://en.wikipedia.org/wiki/Polygon_triangulation + // + // Implementation inspired by: + // -> http://polyk.ivank.net + // -> Starling + + sRestIndices.Clear(); + for (int i = 0; i < numVertices; ++i) + sRestIndices.Add(i); + + restIndexPos = 0; + numRestIndices = numVertices; + + Vector2 a, b, c, p; + int otherIndex; + bool earFound; + int i0, i1, i2; + + while (numRestIndices > 3) + { + earFound = false; + i0 = sRestIndices[restIndexPos % numRestIndices]; + i1 = sRestIndices[(restIndexPos + 1) % numRestIndices]; + i2 = sRestIndices[(restIndexPos + 2) % numRestIndices]; + + a = points[i0]; + b = points[i1]; + c = points[i2]; + + if ((a.y - b.y) * (c.x - b.x) + (b.x - a.x) * (c.y - b.y) >= 0) + { + earFound = true; + for (int i = 3; i < numRestIndices; ++i) + { + otherIndex = sRestIndices[(restIndexPos + i) % numRestIndices]; + p = points[otherIndex]; + + if (IsPointInTriangle(ref p, ref a, ref b, ref c)) + { + earFound = false; + break; + } + } + } + + if (earFound) + { + vb.AddTriangle(i0, i1, i2); + sRestIndices.RemoveAt((restIndexPos + 1) % numRestIndices); + + numRestIndices--; + restIndexPos = 0; + } + else + { + restIndexPos++; + if (restIndexPos == numRestIndices) break; // no more ears + } + } + vb.AddTriangle(sRestIndices[0], sRestIndices[1], sRestIndices[2]); + + if (colors != null) + vb.RepeatColors(colors, 0, vb.currentVertCount); + + if (lineWidth > 0) + DrawOutline(vb); + } + + void DrawOutline(VertexBuffer vb) + { + int numVertices = points.Count; + int start = vb.currentVertCount - numVertices; + int k = vb.currentVertCount; + for (int i = 0; i < numVertices; i++) + { + Vector3 p0 = vb.vertices[start + i]; + p0.y = -p0.y; + Vector3 p1; + if (i < numVertices - 1) + p1 = vb.vertices[start + i + 1]; + else + p1 = vb.vertices[start]; + p1.y = -p1.y; + + Vector3 lineVector = p1 - p0; + Vector3 widthVector = Vector3.Cross(lineVector, new Vector3(0, 0, 1)); + widthVector.Normalize(); + + vb.AddVert(p0 - widthVector * lineWidth * 0.5f, lineColor); + vb.AddVert(p0 + widthVector * lineWidth * 0.5f, lineColor); + vb.AddVert(p1 - widthVector * lineWidth * 0.5f, lineColor); + vb.AddVert(p1 + widthVector * lineWidth * 0.5f, lineColor); + + k += 4; + vb.AddTriangle(k - 4, k - 3, k - 1); + vb.AddTriangle(k - 4, k - 1, k - 2); + + //joint + if (i != 0) + { + vb.AddTriangle(k - 6, k - 5, k - 3); + vb.AddTriangle(k - 6, k - 3, k - 4); + } + if (i == numVertices - 1) + { + start += numVertices; + vb.AddTriangle(k - 2, k - 1, start + 1); + vb.AddTriangle(k - 2, start + 1, start); + } + } + } + + bool IsPointInTriangle(ref Vector2 p, ref Vector2 a, ref Vector2 b, ref Vector2 c) + { + // From Starling + // This algorithm is described well in this article: + // http://www.blackpawn.com/texts/pointinpoly/default.html + + float v0x = c.x - a.x; + float v0y = c.y - a.y; + float v1x = b.x - a.x; + float v1y = b.y - a.y; + float v2x = p.x - a.x; + float v2y = p.y - a.y; + + float dot00 = v0x * v0x + v0y * v0y; + float dot01 = v0x * v1x + v0y * v1y; + float dot02 = v0x * v2x + v0y * v2y; + float dot11 = v1x * v1x + v1y * v1y; + float dot12 = v1x * v2x + v1y * v2y; + + float invDen = 1.0f / (dot00 * dot11 - dot01 * dot01); + float u = (dot11 * dot02 - dot01 * dot12) * invDen; + float v = (dot00 * dot12 - dot01 * dot02) * invDen; + + return (u >= 0) && (v >= 0) && (u + v < 1); + } + + public bool HitTest(Rect contentRect, Vector2 point) + { + if (!contentRect.Contains(point)) + return false; + + // Algorithm & implementation thankfully taken from: + // -> http://alienryderflex.com/polygon/ + // inspired by Starling + int len = points.Count; + int i; + int j = len - 1; + bool oddNodes = false; + float w = contentRect.width; + float h = contentRect.height; + + for (i = 0; i < len; ++i) + { + float ix = points[i].x; + float iy = points[i].y; + float jx = points[j].x; + float jy = points[j].y; + if (usePercentPositions) + { + ix *= w; + iy *= h; + ix *= w; + iy *= h; + } + + if ((iy < point.y && jy >= point.y || jy < point.y && iy >= point.y) && (ix <= point.x || jx <= point.x)) + { + if (ix + (point.y - iy) / (jy - iy) * (jx - ix) < point.x) + oddNodes = !oddNodes; + } + + j = i; + } + + return oddNodes; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs.meta new file mode 100644 index 0000000..90929dc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/PolygonMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: db020628cd79e714fbafdbaaa2cc355f +timeCreated: 1545987173 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs new file mode 100644 index 0000000..4702552 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs @@ -0,0 +1,85 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class RectMesh : IMeshFactory, IHitTest + { + /// + /// + /// + public Rect? drawRect; + + /// + /// + /// + public float lineWidth; + + /// + /// + /// + public Color32 lineColor; + + /// + /// + /// + public Color32? fillColor; + + /// + /// + /// + public Color32[] colors; + + public RectMesh() + { + lineColor = Color.black; + } + + public void OnPopulateMesh(VertexBuffer vb) + { + Rect rect = drawRect != null ? (Rect)drawRect : vb.contentRect; + Color32 color = fillColor != null ? (Color32)fillColor : vb.vertexColor; + if (lineWidth == 0) + { + if (color.a != 0)//optimized + vb.AddQuad(rect, color); + } + else + { + Rect part; + + //left,right + part = new Rect(rect.x, rect.y, lineWidth, rect.height); + vb.AddQuad(part, lineColor); + part = new Rect(rect.xMax - lineWidth, rect.y, lineWidth, rect.height); + vb.AddQuad(part, lineColor); + + //top, bottom + part = new Rect(rect.x + lineWidth, rect.y, rect.width - lineWidth * 2, lineWidth); + vb.AddQuad(part, lineColor); + part = new Rect(rect.x + lineWidth, rect.yMax - lineWidth, rect.width - lineWidth * 2, lineWidth); + vb.AddQuad(part, lineColor); + + //middle + if (color.a != 0)//optimized + { + part = Rect.MinMaxRect(rect.x + lineWidth, rect.y + lineWidth, rect.xMax - lineWidth, rect.yMax - lineWidth); + if (part.width > 0 && part.height > 0) + vb.AddQuad(part, color); + } + } + + if (colors != null) + vb.RepeatColors(colors, 0, vb.currentVertCount); + + vb.AddTriangles(); + } + + public bool HitTest(Rect contentRect, Vector2 point) + { + return contentRect.Contains(point); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs.meta new file mode 100644 index 0000000..5c1ca2b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RectMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 13a3a9d0d365d834696112114d7bf951 +timeCreated: 1545987172 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs new file mode 100644 index 0000000..6125981 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs @@ -0,0 +1,128 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class RegularPolygonMesh : IMeshFactory, IHitTest + { + /// + /// + /// + public Rect? drawRect; + + /// + /// + /// + public int sides; + + /// + /// + /// + public float lineWidth; + + /// + /// + /// + public Color32 lineColor; + + /// + /// + /// + public Color32? centerColor; + + /// + /// + /// + public Color32? fillColor; + + /// + /// + /// + public float[] distances; + + /// + /// + /// + public float rotation; + + public RegularPolygonMesh() + { + sides = 3; + lineColor = Color.black; + } + + public void OnPopulateMesh(VertexBuffer vb) + { + if (distances != null && distances.Length < sides) + { + Debug.LogError("distances.Length 0) + { + vb.AddVert(vec, lineColor); + + xv = Mathf.Cos(angle) * r + centerX; + yv = Mathf.Sin(angle) * r + centerY; + vb.AddVert(new Vector3(xv, yv, 0), lineColor); + } + angle += angleDelta; + } + + if (lineWidth > 0) + { + int tmp = sides * 3; + for (int i = 0; i < tmp; i += 3) + { + if (i != tmp - 3) + { + vb.AddTriangle(0, i + 1, i + 4); + vb.AddTriangle(i + 5, i + 2, i + 3); + vb.AddTriangle(i + 3, i + 6, i + 5); + } + else + { + vb.AddTriangle(0, i + 1, 1); + vb.AddTriangle(2, i + 2, i + 3); + vb.AddTriangle(i + 3, 3, 2); + } + } + } + else + { + for (int i = 0; i < sides; i++) + vb.AddTriangle(0, i + 1, (i == sides - 1) ? 1 : i + 2); + } + } + + public bool HitTest(Rect contentRect, Vector2 point) + { + if (drawRect != null) + return ((Rect)drawRect).Contains(point); + else + return contentRect.Contains(point); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs.meta new file mode 100644 index 0000000..6009bf4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RegularPolygonMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a4084bdb2f1738340a28ab5699977f3b +timeCreated: 1545987173 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs new file mode 100644 index 0000000..542b930 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs @@ -0,0 +1,177 @@ +using UnityEngine; + +namespace FairyGUI +{ + public class RoundedRectMesh : IMeshFactory, IHitTest + { + /// + /// + /// + public Rect? drawRect; + + /// + /// + /// + public float lineWidth; + + /// + /// + /// + public Color32 lineColor; + + /// + /// + /// + public Color32? fillColor; + + /// + /// + /// + public float topLeftRadius; + + /// + /// + /// + public float topRightRadius; + + /// + /// + /// + public float bottomLeftRadius; + + /// + /// + /// + public float bottomRightRadius; + + public RoundedRectMesh() + { + lineColor = Color.black; + } + + public void OnPopulateMesh(VertexBuffer vb) + { + Rect rect = drawRect != null ? (Rect)drawRect : vb.contentRect; + Color32 color = fillColor != null ? (Color32)fillColor : vb.vertexColor; + + float radiusX = rect.width / 2; + float radiusY = rect.height / 2; + float cornerMaxRadius = Mathf.Min(radiusX, radiusY); + float centerX = radiusX + rect.x; + float centerY = radiusY + rect.y; + + vb.AddVert(new Vector3(centerX, centerY, 0), color); + + int cnt = vb.currentVertCount; + for (int i = 0; i < 4; i++) + { + float radius = 0; + switch (i) + { + case 0: + radius = bottomRightRadius; + break; + + case 1: + radius = bottomLeftRadius; + break; + + case 2: + radius = topLeftRadius; + break; + + case 3: + radius = topRightRadius; + break; + } + radius = Mathf.Min(cornerMaxRadius, radius); + + float offsetX = rect.x; + float offsetY = rect.y; + + if (i == 0 || i == 3) + offsetX = rect.xMax - radius * 2; + if (i == 0 || i == 1) + offsetY = rect.yMax - radius * 2; + + if (radius != 0) + { + int partNumSides = Mathf.Max(1, Mathf.CeilToInt(Mathf.PI * radius / 8)) + 1; + float angleDelta = Mathf.PI / 2 / partNumSides; + float angle = Mathf.PI / 2 * i; + float startAngle = angle; + + for (int j = 1; j <= partNumSides; j++) + { + if (j == partNumSides) //消除精度误差带来的不对齐 + angle = startAngle + Mathf.PI / 2; + Vector3 v1 = new Vector3(offsetX + Mathf.Cos(angle) * (radius - lineWidth) + radius, + offsetY + Mathf.Sin(angle) * (radius - lineWidth) + radius, 0); + vb.AddVert(v1, color); + if (lineWidth != 0) + { + vb.AddVert(v1, lineColor); + vb.AddVert(new Vector3(offsetX + Mathf.Cos(angle) * radius + radius, + offsetY + Mathf.Sin(angle) * radius + radius, 0), lineColor); + } + angle += angleDelta; + } + } + else + { + Vector3 v1 = new Vector3(offsetX, offsetY, 0); + if (lineWidth != 0) + { + if (i == 0 || i == 3) + offsetX -= lineWidth; + else + offsetX += lineWidth; + if (i == 0 || i == 1) + offsetY -= lineWidth; + else + offsetY += lineWidth; + Vector3 v2 = new Vector3(offsetX, offsetY, 0); + vb.AddVert(v2, color); + vb.AddVert(v2, lineColor); + vb.AddVert(v1, lineColor); + } + else + vb.AddVert(v1, color); + } + } + cnt = vb.currentVertCount - cnt; + + if (lineWidth > 0) + { + for (int i = 0; i < cnt; i += 3) + { + if (i != cnt - 3) + { + vb.AddTriangle(0, i + 1, i + 4); + vb.AddTriangle(i + 5, i + 2, i + 3); + vb.AddTriangle(i + 3, i + 6, i + 5); + } + else + { + vb.AddTriangle(0, i + 1, 1); + vb.AddTriangle(2, i + 2, i + 3); + vb.AddTriangle(i + 3, 3, 2); + } + } + } + else + { + for (int i = 0; i < cnt; i++) + vb.AddTriangle(0, i + 1, (i == cnt - 1) ? 1 : i + 2); + } + } + + public bool HitTest(Rect contentRect, Vector2 point) + { + if (drawRect != null) + return ((Rect)drawRect).Contains(point); + else + return contentRect.Contains(point); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs.meta new file mode 100644 index 0000000..d5c6d91 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/RoundedRectMesh.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2f910c4392a714c41b421c296621562b +timeCreated: 1545987172 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs new file mode 100644 index 0000000..5cd375f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs @@ -0,0 +1,90 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class StraightLineMesh : IMeshFactory + { + /// + /// + /// + public Color color; + + /// + /// + /// + public Vector3 origin; + + /// + /// + /// + public Vector3 end; + + /// + /// + /// + public float lineWidth; + + /// + /// + /// + public bool repeatFill; + + public StraightLineMesh() + { + color = Color.black; + lineWidth = 1; + } + + /// + /// + /// + /// + /// + /// + public StraightLineMesh(float lineWidth, Color color, bool repeatFill) + { + this.lineWidth = lineWidth; + this.color = color; + this.repeatFill = repeatFill; + } + + public void OnPopulateMesh(VertexBuffer vb) + { + if (origin == end) + return; + + float length = Vector2.Distance(origin, end); + Vector3 lineVector = end - origin; + Vector3 widthVector = Vector3.Cross(lineVector, new Vector3(0, 0, 1)); + widthVector.Normalize(); + + Vector3 v0, v1, v2, v3; + + if (repeatFill) + { + float ratio = length / vb.textureSize.x; + v0 = VertexBuffer.NormalizedUV[0]; + v1 = VertexBuffer.NormalizedUV[1]; + v2 = new Vector2(ratio, 1); + v3 = new Vector2(ratio, 0); + } + else + { + v0 = new Vector2(vb.uvRect.xMin, vb.uvRect.yMin); + v1 = new Vector2(vb.uvRect.xMin, vb.uvRect.yMax); + v2 = new Vector2(vb.uvRect.xMax, vb.uvRect.yMax); + v3 = new Vector2(vb.uvRect.xMax, vb.uvRect.yMin); + } + + vb.AddVert(origin - widthVector * lineWidth * 0.5f, color, v0); + vb.AddVert(origin + widthVector * lineWidth * 0.5f, color, v1); + vb.AddVert(end + widthVector * lineWidth * 0.5f, color, v2); + vb.AddVert(end - widthVector * lineWidth * 0.5f, color, v3); + + vb.AddTriangles(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs.meta new file mode 100644 index 0000000..19278bf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/StraightLineMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27b002bc89d804a7b8058b9d16d5c506 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs new file mode 100644 index 0000000..35e17a9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs @@ -0,0 +1,519 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public sealed class VertexBuffer + { + /// + /// + /// + public Rect contentRect; + + /// + /// + /// + public Rect uvRect; + + /// + /// + /// + public Color32 vertexColor; + + /// + /// + /// + public Vector2 textureSize; + + /// + /// + /// + public readonly List vertices; + + /// + /// + /// + public readonly List colors; + + /// + /// + /// + public readonly List uvs; + + /// + /// + /// + public readonly List uvs2; + + /// + /// + /// + public readonly List triangles; + + static public Vector2[] NormalizedUV = new Vector2[] { + new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) }; + + static public Vector2[] NormalizedPosition = new Vector2[] { + new Vector2(0, 1), new Vector2(0, 0), new Vector2(1, 0), new Vector2(1, 1) }; + + internal bool _alphaInVertexColor; + internal bool _isArbitraryQuad; + + static Stack _pool = new Stack(); + + /// + /// + /// + /// + public static VertexBuffer Begin() + { + if (_pool.Count > 0) + { + VertexBuffer inst = _pool.Pop(); + inst.Clear(); + return inst; + } + else + return new VertexBuffer(); + } + + /// + /// + /// + /// + public static VertexBuffer Begin(VertexBuffer source) + { + VertexBuffer vb = Begin(); + vb.contentRect = source.contentRect; + vb.uvRect = source.uvRect; + vb.vertexColor = source.vertexColor; + vb.textureSize = source.textureSize; + + return vb; + } + + private VertexBuffer() + { + vertices = new List(); + colors = new List(); + uvs = new List(); + uvs2 = new List(); + triangles = new List(); + } + + /// + /// + /// + public void End() + { + _pool.Push(this); + } + + /// + /// + /// + public void Clear() + { + vertices.Clear(); + colors.Clear(); + uvs.Clear(); + uvs2.Clear(); + triangles.Clear(); + + _isArbitraryQuad = false; + _alphaInVertexColor = false; + } + + /// + /// + /// + public int currentVertCount + { + get + { + return vertices.Count; + } + } + + /// + /// + /// + /// + public void AddVert(Vector3 position) + { + position.y = -position.y; + vertices.Add(position); + colors.Add(vertexColor); + if (vertexColor.a != 255) + _alphaInVertexColor = true; + uvs.Add(new Vector2( + Mathf.Lerp(uvRect.xMin, uvRect.xMax, (position.x - contentRect.xMin) / contentRect.width), + Mathf.Lerp(uvRect.yMax, uvRect.yMin, (-position.y - contentRect.yMin) / contentRect.height))); + } + + /// + /// + /// + /// + /// + public void AddVert(Vector3 position, Color32 color) + { + position.y = -position.y; + vertices.Add(position); + colors.Add(color); + if (color.a != 255) + _alphaInVertexColor = true; + uvs.Add(new Vector2( + Mathf.Lerp(uvRect.xMin, uvRect.xMax, (position.x - contentRect.xMin) / contentRect.width), + Mathf.Lerp(uvRect.yMax, uvRect.yMin, (-position.y - contentRect.yMin) / contentRect.height))); + } + + /// + /// + /// + /// + /// + /// + public void AddVert(Vector3 position, Color32 color, Vector2 uv) + { + position.y = -position.y; + vertices.Add(position); + uvs.Add(new Vector2(uv.x, uv.y)); + colors.Add(color); + if (color.a != 255) + _alphaInVertexColor = true; + } + + /// + /// + /// 1---2 + /// | / | + /// 0---3 + /// + /// + public void AddQuad(Rect vertRect) + { + AddVert(new Vector3(vertRect.xMin, vertRect.yMax, 0f)); + AddVert(new Vector3(vertRect.xMin, vertRect.yMin, 0f)); + AddVert(new Vector3(vertRect.xMax, vertRect.yMin, 0f)); + AddVert(new Vector3(vertRect.xMax, vertRect.yMax, 0f)); + } + + /// + /// + /// + /// + /// + public void AddQuad(Rect vertRect, Color32 color) + { + AddVert(new Vector3(vertRect.xMin, vertRect.yMax, 0f), color); + AddVert(new Vector3(vertRect.xMin, vertRect.yMin, 0f), color); + AddVert(new Vector3(vertRect.xMax, vertRect.yMin, 0f), color); + AddVert(new Vector3(vertRect.xMax, vertRect.yMax, 0f), color); + } + + /// + /// + /// + /// + /// + /// + public void AddQuad(Rect vertRect, Color32 color, Rect uvRect) + { + vertices.Add(new Vector3(vertRect.xMin, -vertRect.yMax, 0f)); + vertices.Add(new Vector3(vertRect.xMin, -vertRect.yMin, 0f)); + vertices.Add(new Vector3(vertRect.xMax, -vertRect.yMin, 0f)); + vertices.Add(new Vector3(vertRect.xMax, -vertRect.yMax, 0f)); + + uvs.Add(new Vector2(uvRect.xMin, uvRect.yMin)); + uvs.Add(new Vector2(uvRect.xMin, uvRect.yMax)); + uvs.Add(new Vector2(uvRect.xMax, uvRect.yMax)); + uvs.Add(new Vector2(uvRect.xMax, uvRect.yMin)); + + colors.Add(color); + colors.Add(color); + colors.Add(color); + colors.Add(color); + + if (color.a != 255) + _alphaInVertexColor = true; + } + + static List helperV4List = new List(4) { Vector4.zero, Vector4.zero, Vector4.zero, Vector4.zero }; + internal List FixUVForArbitraryQuad() + { + //ref1 http://www.reedbeta.com/blog/quadrilateral-interpolation-part-1/ + //ref2 https://bitlush.com/blog/arbitrary-quadrilaterals-in-opengl-es-2-0 + + Vector4 qq = Vector4.one; + Vector2 a = vertices[2] - vertices[0]; + Vector2 b = vertices[1] - vertices[3]; + Vector2 c = vertices[0] - vertices[3]; + + float cross = a.x * b.y - a.y * b.x; + if (cross != 0) + { + float s = (a.x * c.y - a.y * c.x) / cross; + if (s > 0 && s < 1) + { + float t = (b.x * c.y - b.y * c.x) / cross; + if (t > 0 && t < 1) + { + qq.x = 1 / (1 - t); + qq.y = 1 / s; + qq.z = 1 / t; + qq.w = 1 / (1 - s); + } + } + } + + for (int i = 0; i < 4; i++) + { + Vector4 v = uvs[i]; + float q = qq[i]; + v.x *= q; + v.y *= q; + v.w = q; + helperV4List[i] = v; + } + + return helperV4List; + } + + /// + /// + /// + /// + /// + /// + public void RepeatColors(Color32[] value, int startIndex, int count) + { + int len = Mathf.Min(startIndex + count, vertices.Count); + int colorCount = value.Length; + int k = 0; + for (int i = startIndex; i < len; i++) + { + Color32 c = value[(k++) % colorCount]; + colors[i] = c; + if (c.a != 255) + _alphaInVertexColor = true; + } + } + + /// + /// + /// + /// + /// + /// + public void AddTriangle(int idx0, int idx1, int idx2) + { + triangles.Add(idx0); + triangles.Add(idx1); + triangles.Add(idx2); + } + + /// + /// + /// + /// + /// + public void AddTriangles(int[] idxList, int startVertexIndex = 0) + { + if (startVertexIndex != 0) + { + if (startVertexIndex < 0) + startVertexIndex = vertices.Count + startVertexIndex; + + int cnt = idxList.Length; + for (int i = 0; i < cnt; i++) + triangles.Add(idxList[i] + startVertexIndex); + } + else + triangles.AddRange(idxList); + } + + /// + /// + /// + /// + public void AddTriangles(int startVertexIndex = 0) + { + int cnt = vertices.Count; + if (startVertexIndex < 0) + startVertexIndex = cnt + startVertexIndex; + + for (int i = startVertexIndex; i < cnt; i += 4) + { + triangles.Add(i); + triangles.Add(i + 1); + triangles.Add(i + 2); + + triangles.Add(i + 2); + triangles.Add(i + 3); + triangles.Add(i); + } + } + + /// + /// + /// + /// + /// + public Vector3 GetPosition(int index) + { + if (index < 0) + index = vertices.Count + index; + + Vector3 vec = vertices[index]; + vec.y = -vec.y; + return vec; + } + + /// + /// + /// + /// + /// + /// + public Vector2 GetUVAtPosition(Vector2 position, bool usePercent) + { + if (usePercent) + { + return new Vector2(Mathf.Lerp(uvRect.xMin, uvRect.xMax, position.x), + Mathf.Lerp(uvRect.yMax, uvRect.yMin, position.y)); + } + else + return new Vector2(Mathf.Lerp(uvRect.xMin, uvRect.xMax, (position.x - contentRect.xMin) / contentRect.width), + Mathf.Lerp(uvRect.yMax, uvRect.yMin, (position.y - contentRect.yMin) / contentRect.height)); + } + + /// + /// + /// + /// + public void Append(VertexBuffer vb) + { + int len = vertices.Count; + vertices.AddRange(vb.vertices); + uvs.AddRange(vb.uvs); + uvs2.AddRange(vb.uvs2); + colors.AddRange(vb.colors); + if (len != 0) + { + int len1 = vb.triangles.Count; + for (int i = 0; i < len1; i++) + triangles.Add(vb.triangles[i] + len); + } + else + triangles.AddRange(vb.triangles); + + if (vb._alphaInVertexColor) + _alphaInVertexColor = true; + } + + /// + /// + /// + /// + public void Insert(VertexBuffer vb) + { + vertices.InsertRange(0, vb.vertices); + uvs.InsertRange(0, vb.uvs); + uvs2.InsertRange(0, vb.uvs2); + colors.InsertRange(0, vb.colors); + int len = triangles.Count; + if (len != 0) + { + int len1 = vb.vertices.Count; + for (int i = 0; i < len; i++) + triangles[i] += len1; + } + triangles.InsertRange(0, vb.triangles); + + if (vb._alphaInVertexColor) + _alphaInVertexColor = true; + } + + static float[] STROKE_OFFSET = new float[] + { + -1, 0, 1, 0, + 0, -1, 0, 1, + -1, -1, 1, -1, + -1, 1, 1, 1 + }; + public void GenerateOutline(int dirs, float width, Color color) + { + int count = vertices.Count; + if (count + dirs * count > VerticesLimit) + { + Debug.LogWarning("Outline effect cannot be completed as mesh is too large."); + return; + } + + VertexBuffer vb2 = VertexBuffer.Begin(); + if (color.a != 255) + vb2._alphaInVertexColor = true; + for (int j = 0; j < dirs; j++) + { + for (int i = 0; i < count; i++) + { + Vector3 vert = vertices[i]; + vb2.vertices.Add(new Vector3(vert.x + STROKE_OFFSET[j * 2] * width, vert.y + STROKE_OFFSET[j * 2 + 1] * width, 0)); + vb2.colors.Add(color); + } + + vb2.uvs.AddRange(uvs); + if (uvs2.Count > 0) + vb2.uvs2.AddRange(uvs2); + } + Insert(vb2); + vb2.End(); + } + + public void GenerateShadow(Vector2 offset, Color color) + { + int count = vertices.Count; + if (count + count > VerticesLimit) + { + Debug.LogWarning("Shadow effect cannot be completed as mesh is too large."); + return; + } + + VertexBuffer vb2 = VertexBuffer.Begin(); + if (color.a != 255) + vb2._alphaInVertexColor = true; + for (int i = 0; i < count; i++) + { + Vector3 vert = vertices[i]; + vb2.vertices.Add(new Vector3(vert.x + offset.x, vert.y - offset.y, 0)); + vb2.colors.Add(color); + } + + vb2.uvs.AddRange(uvs); + if (uvs2.Count > 0) + vb2.uvs2.AddRange(uvs2); + Insert(vb2); + vb2.End(); + } + + const int VerticesLimit = 65000; + public void CheckMeshLimit() + { + int count = vertices.Count; + if (count > VerticesLimit) + { + Debug.LogWarning("A mesh may not have more than " + VerticesLimit + " vertices."); + vertices.RemoveRange(VerticesLimit, count - VerticesLimit); + colors.RemoveRange(VerticesLimit, count - VerticesLimit); + uvs.RemoveRange(VerticesLimit, count - VerticesLimit); + if (uvs2.Count > 0) + uvs2.RemoveRange(VerticesLimit, count - VerticesLimit); + count = VerticesLimit; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs.meta new file mode 100644 index 0000000..105e95f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Mesh/VertexBuffer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8d5501e8f84e40e47835611ab3896029 +timeCreated: 1545987173 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs b/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs new file mode 100644 index 0000000..3a571e2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs @@ -0,0 +1,414 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class MovieClip : Image + { + /// + /// + /// + public class Frame + { + public NTexture texture; + public float addDelay; + } + + /// + /// + /// + public float interval; + + /// + /// + /// + public bool swing; + + /// + /// + /// + public float repeatDelay; + + /// + /// + /// + public float timeScale; + + /// + /// Whether to ignore Unity time scale. + /// + public bool ignoreEngineTimeScale; + + Frame[] _frames; + int _frameCount; + int _frame; + bool _playing; + int _start; + int _end; + int _times; + int _endAt; + int _status; //0-none, 1-next loop, 2-ending, 3-ended + + float _frameElapsed; //当前帧延迟 + bool _reversed; + int _repeatedCount; + TimerCallback _timerDelegate; + + EventListener _onPlayEnd; + + /// + /// + /// + public MovieClip() + { + interval = 0.1f; + _playing = true; + _timerDelegate = OnTimer; + timeScale = 1; + ignoreEngineTimeScale = false; + + if (Application.isPlaying) + { + onAddedToStage.Add(OnAddedToStage); + onRemovedFromStage.Add(OnRemoveFromStage); + } + + SetPlaySettings(); + } + + /// + /// + /// + public EventListener onPlayEnd + { + get { return _onPlayEnd ?? (_onPlayEnd = new EventListener(this, "onPlayEnd")); } + } + + /// + /// + /// + public Frame[] frames + { + get + { + return _frames; + } + set + { + _frames = value; + _scale9Grid = null; + _scaleByTile = false; + + if (_frames == null) + { + _frameCount = 0; + graphics.texture = null; + CheckTimer(); + return; + } + _frameCount = frames.Length; + + if (_end == -1 || _end > _frameCount - 1) + _end = _frameCount - 1; + if (_endAt == -1 || _endAt > _frameCount - 1) + _endAt = _frameCount - 1; + + if (_frame < 0 || _frame > _frameCount - 1) + _frame = _frameCount - 1; + + InvalidateBatchingState(); + + _frameElapsed = 0; + _repeatedCount = 0; + _reversed = false; + + DrawFrame(); + CheckTimer(); + } + } + + /// + /// + /// + public bool playing + { + get { return _playing; } + set + { + if (_playing != value) + { + _playing = value; + CheckTimer(); + } + } + } + + /// + /// + /// + public int frame + { + get { return _frame; } + set + { + if (_frame != value) + { + if (_frames != null && value >= _frameCount) + value = _frameCount - 1; + + _frame = value; + _frameElapsed = 0; + DrawFrame(); + } + } + } + + /// + /// + /// + public void Rewind() + { + _frame = 0; + _frameElapsed = 0; + _reversed = false; + _repeatedCount = 0; + DrawFrame(); + } + + /// + /// + /// + /// + public void SyncStatus(MovieClip anotherMc) + { + _frame = anotherMc._frame; + _frameElapsed = anotherMc._frameElapsed; + _reversed = anotherMc._reversed; + _repeatedCount = anotherMc._repeatedCount; + DrawFrame(); + } + + /// + /// + /// + /// + public void Advance(float time) + { + int beginFrame = _frame; + bool beginReversed = _reversed; + float backupTime = time; + while (true) + { + float tt = interval + _frames[_frame].addDelay; + if (_frame == 0 && _repeatedCount > 0) + tt += repeatDelay; + if (time < tt) + { + _frameElapsed = 0; + break; + } + + time -= tt; + + if (swing) + { + if (_reversed) + { + _frame--; + if (_frame <= 0) + { + _frame = 0; + _repeatedCount++; + _reversed = !_reversed; + } + } + else + { + _frame++; + if (_frame > _frameCount - 1) + { + _frame = Mathf.Max(0, _frameCount - 2); + _repeatedCount++; + _reversed = !_reversed; + } + } + } + else + { + _frame++; + if (_frame > _frameCount - 1) + { + _frame = 0; + _repeatedCount++; + } + } + + if (_frame == beginFrame && _reversed == beginReversed) //走了一轮了 + { + float roundTime = backupTime - time; //这就是一轮需要的时间 + time -= Mathf.FloorToInt(time / roundTime) * roundTime; //跳过 + } + } + + DrawFrame(); + } + + /// + /// + /// + public void SetPlaySettings() + { + SetPlaySettings(0, -1, 0, -1); + } + + /// + /// 从start帧开始,播放到end帧(-1表示结尾),重复times次(0表示无限循环),循环结束后,停止在endAt帧(-1表示参数end) + /// + /// + /// + /// + /// + public void SetPlaySettings(int start, int end, int times, int endAt) + { + _start = start; + _end = end; + if (_end == -1 || _end > _frameCount - 1) + _end = _frameCount - 1; + _times = times; + _endAt = endAt; + if (_endAt == -1) + _endAt = _end; + _status = 0; + this.frame = start; + } + + void OnAddedToStage() + { + if (_playing && _frameCount > 0) + Timers.inst.AddUpdate(_timerDelegate); + } + + void OnRemoveFromStage() + { + Timers.inst.Remove(_timerDelegate); + } + + void CheckTimer() + { + if (!Application.isPlaying) + return; + + if (_playing && _frameCount > 0 && this.stage != null) + Timers.inst.AddUpdate(_timerDelegate); + else + Timers.inst.Remove(_timerDelegate); + } + + void OnTimer(object param) + { + if (!_playing || _frameCount == 0 || _status == 3) + return; + + float dt; + if (ignoreEngineTimeScale) + { + dt = Time.unscaledDeltaTime; + if (dt > 0.1f) + dt = 0.1f; + } + else + dt = Time.deltaTime; + if (timeScale != 1) + dt *= timeScale; + + _frameElapsed += dt; + float tt = interval + _frames[_frame].addDelay; + if (_frame == 0 && _repeatedCount > 0) + tt += repeatDelay; + if (_frameElapsed < tt) + return; + + _frameElapsed -= tt; + if (_frameElapsed > interval) + _frameElapsed = interval; + + if (swing) + { + if (_reversed) + { + _frame--; + if (_frame <= 0) + { + _frame = 0; + _repeatedCount++; + _reversed = !_reversed; + } + } + else + { + _frame++; + if (_frame > _frameCount - 1) + { + _frame = Mathf.Max(0, _frameCount - 2); + _repeatedCount++; + _reversed = !_reversed; + } + } + } + else + { + _frame++; + if (_frame > _frameCount - 1) + { + _frame = 0; + _repeatedCount++; + } + } + + if (_status == 1) //new loop + { + _frame = _start; + _frameElapsed = 0; + _status = 0; + DrawFrame(); + } + else if (_status == 2) //ending + { + _frame = _endAt; + _frameElapsed = 0; + _status = 3; //ended + DrawFrame(); + + DispatchEvent("onPlayEnd", null); + } + else + { + DrawFrame(); + if (_frame == _end) + { + if (_times > 0) + { + _times--; + if (_times == 0) + _status = 2; //ending + else + _status = 1; //new loop + } + else if (_start != 0) + _status = 1; //new loop + } + } + } + + void DrawFrame() + { + if (_frameCount > 0) + { + Frame frame = _frames[_frame]; + graphics.texture = frame.texture; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs.meta new file mode 100644 index 0000000..e656849 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/MovieClip.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5ddeeb52259b7ed4e8a604fa8cd47897 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs b/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs new file mode 100644 index 0000000..f1caa79 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs @@ -0,0 +1,75 @@ +using System; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class NAudioClip + { + public static Action CustomDestroyMethod; + + /// + /// + /// + public DestroyMethod destroyMethod; + + /// + /// + /// + public AudioClip nativeClip; + + /// + /// + /// + /// + public NAudioClip(AudioClip audioClip) + { + nativeClip = audioClip; + } + + /// + /// + /// + public void Unload() + { + if (nativeClip == null) + return; + + if (destroyMethod == DestroyMethod.Unload) + Resources.UnloadAsset(nativeClip); + else if (destroyMethod == DestroyMethod.Destroy) + UnityEngine.Object.DestroyImmediate(nativeClip, true); + else if (destroyMethod == DestroyMethod.Custom) + { + if (CustomDestroyMethod == null) + Debug.LogWarning("NAudioClip.CustomDestroyMethod must be set to handle DestroyMethod.Custom"); + else + CustomDestroyMethod(nativeClip); + } + + nativeClip = null; + } + + /// + /// + /// + /// + public void Reload(AudioClip audioClip) + { + if (nativeClip != null && nativeClip != audioClip) + Unload(); + + nativeClip = audioClip; + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + CustomDestroyMethod = null; + } +#endif + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs.meta new file mode 100644 index 0000000..4b6366f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/NAudioClip.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e081bc28928c3474194543c862fadec5 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs b/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs new file mode 100644 index 0000000..cdbd3f9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs @@ -0,0 +1,880 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; +using Object = UnityEngine.Object; + +namespace FairyGUI +{ + /// + /// + /// + public class NGraphics : IMeshFactory, IBatchable + { + /// + /// + /// + public GameObject gameObject { get; private set; } + + /// + /// + /// + public MeshFilter meshFilter { get; private set; } + + /// + /// + /// + public MeshRenderer meshRenderer { get; private set; } + + /// + /// + /// + public Mesh mesh { get; private set; } + + /// + /// + /// + public BlendMode blendMode; + + /// + /// 不参与剪裁 + /// + public bool dontClip; + + /// + /// 当Mesh更新时触发 + /// + public event Action meshModifier; + + /// + /// + /// + public List subInstances; + + /// + /// + /// + public Vector4 userData; + + NTexture _texture; + string _shader; + Material _material; + int _customMatarial; //0-none, 1-common, 2-support internal mask, 128-owns material + MaterialManager _manager; + string[] _shaderKeywords; + int _materialFlags; + IMeshFactory _meshFactory; + + float _alpha; + Color _color; + bool _meshDirty; + Rect _contentRect; + FlipType _flip; + + public class VertexMatrix + { + public Vector3 cameraPos; + public Matrix4x4 matrix; + } + VertexMatrix _vertexMatrix; + + bool hasAlphaBackup; + List _alphaBackup; //透明度改变需要通过修改顶点颜色实现,但顶点颜色本身可能就带有透明度,所以这里要有一个备份 + + internal int _maskFlag; + StencilEraser _stencilEraser; + + MaterialPropertyBlock _propertyBlock; + bool _blockUpdated; + + internal BatchElement _batchElement; + + /// + /// + /// + /// + public NGraphics(GameObject gameObject) + { + this.gameObject = gameObject; + + _alpha = 1f; + _shader = ShaderConfig.imageShader; + _color = Color.white; + _meshFactory = this; + + meshFilter = gameObject.AddComponent(); + meshRenderer = gameObject.AddComponent(); + meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + meshRenderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off; + meshRenderer.receiveShadows = false; + + mesh = new Mesh(); + mesh.name = gameObject.name; + mesh.MarkDynamic(); + + meshFilter.mesh = mesh; + + meshFilter.hideFlags = DisplayObject.hideFlags; + meshRenderer.hideFlags = DisplayObject.hideFlags; + mesh.hideFlags = DisplayObject.hideFlags; + + Stats.LatestGraphicsCreation++; + } + + /// + /// + /// + public IMeshFactory meshFactory + { + get { return _meshFactory; } + set + { + if (_meshFactory != value) + { + _meshFactory = value; + _meshDirty = true; + } + } + } + + /// + /// + /// + /// + /// + public T GetMeshFactory() where T : IMeshFactory, new() + { + if (!(_meshFactory is T)) + { + _meshFactory = new T(); + _meshDirty = true; + } + return (T)_meshFactory; + } + + /// + /// + /// + public Rect contentRect + { + get { return _contentRect; } + set + { + _contentRect = value; + _meshDirty = true; + + if (subInstances != null) + { + foreach (var sub in subInstances) + sub.contentRect = value; + } + } + } + + /// + /// + /// + public FlipType flip + { + get { return _flip; } + set + { + if (_flip != value) + { + _flip = value; + _meshDirty = true; + } + } + } + + /// + /// + /// + public NTexture texture + { + get { return _texture; } + set + { + if (_texture != value) + { + if (value != null) + value.AddRef(); + if (_texture != null) + _texture.ReleaseRef(); + + _texture = value; + if (_customMatarial != 0 && _material != null) + _material.mainTexture = _texture != null ? _texture.nativeTexture : null; + _meshDirty = true; + UpdateManager(); + } + } + } + + /// + /// + /// + public string shader + { + get { return _shader; } + set + { + _shader = value; + UpdateManager(); + } + } + + /// + /// + /// + /// + /// + public void SetShaderAndTexture(string shader, NTexture texture) + { + _shader = shader; + if (_texture != texture) + this.texture = texture; + else + UpdateManager(); + } + + /// + /// + /// + public Material material + { + get + { + if (_customMatarial == 0 && _material == null && _manager != null) + _material = _manager.GetMaterial(_materialFlags, blendMode, 0); + return _material; + } + set + { + if ((_customMatarial & 128) != 0 && _material != null) + Object.DestroyImmediate(_material); + + _material = value; + if (_material != null) + { + _customMatarial = 1; + if (_material.HasProperty(ShaderConfig.ID_Stencil) || _material.HasProperty(ShaderConfig.ID_ClipBox)) + _customMatarial |= 2; + + meshRenderer.sharedMaterial = _material; + if (_texture != null) + _material.mainTexture = _texture.nativeTexture; + } + else + { + _customMatarial = 0; + meshRenderer.sharedMaterial = null; + } + } + } + + /// + /// Same as material property except that ownership is transferred to this object. + /// + /// + public void SetMaterial(Material material) + { + this.material = material; + _customMatarial |= 128; + } + + /// + /// + /// + public string[] materialKeywords + { + get { return _shaderKeywords; } + set + { + _shaderKeywords = value; + UpdateMaterialFlags(); + } + } + + /// + /// + /// + /// + /// + public void ToggleKeyword(string keyword, bool enabled) + { + if (enabled) + { + if (_shaderKeywords == null) + { + _shaderKeywords = new string[] { keyword }; + UpdateMaterialFlags(); + } + else if (Array.IndexOf(_shaderKeywords, keyword) == -1) + { + Array.Resize(ref _shaderKeywords, _shaderKeywords.Length + 1); + _shaderKeywords[_shaderKeywords.Length - 1] = keyword; + UpdateMaterialFlags(); + } + } + else + { + if (_shaderKeywords != null) + { + int i = Array.IndexOf(_shaderKeywords, keyword); + if (i != -1) + { + _shaderKeywords[i] = null; + UpdateMaterialFlags(); + } + } + } + } + + void UpdateManager() + { + if (_texture != null) + _manager = _texture.GetMaterialManager(_shader); + else + _manager = null; + UpdateMaterialFlags(); + } + + void UpdateMaterialFlags() + { + if (_customMatarial != 0) + { + if (material != null) + material.shaderKeywords = _shaderKeywords; + } + else if (_shaderKeywords != null && _manager != null) + _materialFlags = _manager.GetFlagsByKeywords(_shaderKeywords); + else + _materialFlags = 0; + } + + /// + /// + /// + public bool enabled + { + get { return meshRenderer.enabled; } + set { meshRenderer.enabled = value; } + } + + /// + /// + /// + [Obsolete("Use renderingOrder")] + public int sortingOrder + { + get { return meshRenderer.sortingOrder; } + set { meshRenderer.sortingOrder = value; } + } + + /// + /// + /// + public int renderingOrder + { + get { return meshRenderer.sortingOrder; } + set { meshRenderer.sortingOrder = value; } + } + + public void SetRenderingOrder(UpdateContext context, bool inBatch) + { + meshRenderer.sortingOrder = context.renderingOrder++; + + if (subInstances != null && !inBatch) + { + foreach (var sub in subInstances) + { + sub.meshRenderer.sortingOrder = context.renderingOrder++; + } + } + } + + /// + /// + /// + /// + internal void _SetStencilEraserOrder(int value) + { + _stencilEraser.meshRenderer.sortingOrder = value; + } + + /// + /// + /// + /// + public Color color + { + get { return _color; } + set { _color = value; } + } + + /// + /// + /// + public void Tint() + { + if (_meshDirty) + return; + + int vertCount = mesh.vertexCount; + if (vertCount == 0) + return; + + VertexBuffer vb = VertexBuffer.Begin(); + mesh.GetColors(vb.colors); + List colors = vb.colors; + for (int i = 0; i < vertCount; i++) + { + Color32 col = _color; + col.a = (byte)(_alpha * (hasAlphaBackup ? _alphaBackup[i] : (byte)255)); + colors[i] = col; + } + + mesh.SetColors(vb.colors); + vb.End(); + } + + void ChangeAlpha(float value) + { + _alpha = value; + + int vertCount = mesh.vertexCount; + if (vertCount == 0) + return; + + VertexBuffer vb = VertexBuffer.Begin(); + mesh.GetColors(vb.colors); + List colors = vb.colors; + for (int i = 0; i < vertCount; i++) + { + Color32 col = colors[i]; + col.a = (byte)(_alpha * (hasAlphaBackup ? _alphaBackup[i] : (byte)255)); + colors[i] = col; + } + + mesh.SetColors(vb.colors); + vb.End(); + } + + /// + /// + /// + public VertexMatrix vertexMatrix + { + get { return _vertexMatrix; } + set + { + _vertexMatrix = value; + _meshDirty = true; + + if (subInstances != null) + { + foreach (var sub in subInstances) + sub._vertexMatrix = value; + } + } + } + + /// + /// + /// + /// + public MaterialPropertyBlock materialPropertyBlock + { + get + { + if (_propertyBlock == null) + _propertyBlock = new MaterialPropertyBlock(); + + _blockUpdated = true; + return _propertyBlock; + } + } + + /// + /// + /// + public void SetMeshDirty() + { + _meshDirty = true; + + if (subInstances != null) + { + foreach (var g in subInstances) + g._meshDirty = true; + } + } + + /// + /// + /// + /// + public bool UpdateMesh() + { + bool ret = false; + if (_meshDirty) + { + UpdateMeshNow(); + ret = true; + } + + if (subInstances != null) + { + foreach (var g in subInstances) + { + if (g.UpdateMesh()) + ret = true; + } + } + + return ret; + } + + /// + /// + /// + public void Dispose() + { + if (mesh != null) + { + if (Application.isPlaying) + Object.Destroy(mesh); + else + Object.DestroyImmediate(mesh); + mesh = null; + } + if ((_customMatarial & 128) != 0 && _material != null) + Object.DestroyImmediate(_material); + + if (_texture != null) + { + _texture.ReleaseRef(); + _texture = null; + } + + _manager = null; + _material = null; + meshRenderer = null; + meshFilter = null; + _stencilEraser = null; + meshModifier = null; + + if (subInstances != null) + { + foreach (var sub in subInstances) + sub.Dispose(); + subInstances.Clear(); + } + } + + /// + /// + /// + /// + /// + /// + public void Update(UpdateContext context, float alpha, bool grayed) + { + Stats.GraphicsCount++; + + if (_meshDirty) + { + _alpha = alpha; + UpdateMeshNow(); + } + else if (_alpha != alpha) + ChangeAlpha(alpha); + + if (_propertyBlock != null && _blockUpdated) + { + meshRenderer.SetPropertyBlock(_propertyBlock); + _blockUpdated = false; + } + + if (_customMatarial != 0) + { + if ((_customMatarial & 2) != 0 && _material != null) + context.ApplyClippingProperties(_material, false); + } + else + { + if (_manager != null) + { + if (_maskFlag == 1) + { + _material = _manager.GetMaterial((int)MaterialFlags.AlphaMask | _materialFlags, BlendMode.Normal, context.clipInfo.clipId); + context.ApplyAlphaMaskProperties(_material, false); + } + else + { + int matFlags = _materialFlags; + if (grayed) + matFlags |= (int)MaterialFlags.Grayed; + + if (context.clipped) + { + if (context.stencilReferenceValue > 0) + matFlags |= (int)MaterialFlags.StencilTest; + if (context.rectMaskDepth > 0) + { + if (context.clipInfo.soft) + matFlags |= (int)MaterialFlags.SoftClipped; + else + matFlags |= (int)MaterialFlags.Clipped; + } + + _material = _manager.GetMaterial(matFlags, blendMode, context.clipInfo.clipId); + if (_manager.firstMaterialInFrame) + context.ApplyClippingProperties(_material, true); + } + else + _material = _manager.GetMaterial(matFlags, blendMode, 0); + } + } + else + _material = null; + + if (!Material.ReferenceEquals(_material, meshRenderer.sharedMaterial)) + meshRenderer.sharedMaterial = _material; + } + + if (_maskFlag != 0) + { + if (_maskFlag == 1) + _maskFlag = 2; + else + { + if (_stencilEraser != null) + _stencilEraser.enabled = false; + + _maskFlag = 0; + } + } + + if (subInstances != null) + { + foreach (var sub in subInstances) + sub.Update(context, alpha, grayed); + } + } + + internal void _PreUpdateMask(UpdateContext context, uint maskId) + { + //_maskFlag: 0-new mask, 1-active mask, 2-mask complete + if (_maskFlag == 0) + { + if (_stencilEraser == null) + { + _stencilEraser = new StencilEraser(gameObject.transform); + _stencilEraser.meshFilter.mesh = mesh; + } + else + _stencilEraser.enabled = true; + } + + _maskFlag = 1; + + if (_manager != null) + { + //这里使用maskId而不是clipInfo.clipId,是因为遮罩有两个用途,一个是写入遮罩,一个是擦除,两个不能用同一个材质 + Material mat = _manager.GetMaterial((int)MaterialFlags.AlphaMask | _materialFlags, BlendMode.Normal, maskId); + if (!Material.ReferenceEquals(mat, _stencilEraser.meshRenderer.sharedMaterial)) + _stencilEraser.meshRenderer.sharedMaterial = mat; + + context.ApplyAlphaMaskProperties(mat, true); + } + } + + void UpdateMeshNow() + { + _meshDirty = false; + + if (_texture == null || _meshFactory == null) + { + if (mesh.vertexCount > 0) + { + mesh.Clear(); + + if (meshModifier != null) + meshModifier(); + } + return; + } + + VertexBuffer vb = VertexBuffer.Begin(); + vb.contentRect = _contentRect; + vb.uvRect = _texture.uvRect; + if (_texture != null) + vb.textureSize = new Vector2(_texture.width, _texture.height); + else + vb.textureSize = new Vector2(0, 0); + if (_flip != FlipType.None) + { + if (_flip == FlipType.Horizontal || _flip == FlipType.Both) + { + float tmp = vb.uvRect.xMin; + vb.uvRect.xMin = vb.uvRect.xMax; + vb.uvRect.xMax = tmp; + } + if (_flip == FlipType.Vertical || _flip == FlipType.Both) + { + float tmp = vb.uvRect.yMin; + vb.uvRect.yMin = vb.uvRect.yMax; + vb.uvRect.yMax = tmp; + } + } + vb.vertexColor = _color; + _meshFactory.OnPopulateMesh(vb); + + int vertCount = vb.currentVertCount; + if (vertCount == 0) + { + if (mesh.vertexCount > 0) + { + mesh.Clear(); + + if (meshModifier != null) + meshModifier(); + } + vb.End(); + return; + } + + if (_texture.rotated) + { + float xMin = _texture.uvRect.xMin; + float yMin = _texture.uvRect.yMin; + float yMax = _texture.uvRect.yMax; + float tmp; + for (int i = 0; i < vertCount; i++) + { + Vector2 vec = vb.uvs[i]; + tmp = vec.y; + vec.y = yMin + vec.x - xMin; + vec.x = xMin + yMax - tmp; + vb.uvs[i] = vec; + } + } + + hasAlphaBackup = vb._alphaInVertexColor; + if (hasAlphaBackup) + { + if (_alphaBackup == null) + _alphaBackup = new List(); + else + _alphaBackup.Clear(); + for (int i = 0; i < vertCount; i++) + { + Color32 col = vb.colors[i]; + _alphaBackup.Add(col.a); + + col.a = (byte)(col.a * _alpha); + vb.colors[i] = col; + } + } + else if (_alpha != 1) + { + for (int i = 0; i < vertCount; i++) + { + Color32 col = vb.colors[i]; + col.a = (byte)(col.a * _alpha); + vb.colors[i] = col; + } + } + + if (_vertexMatrix != null) + { + Vector3 camPos = _vertexMatrix.cameraPos; + Vector3 center = new Vector3(camPos.x, camPos.y, 0); + center -= _vertexMatrix.matrix.MultiplyPoint(center); + for (int i = 0; i < vertCount; i++) + { + Vector3 pt = vb.vertices[i]; + pt = _vertexMatrix.matrix.MultiplyPoint(pt); + pt += center; + Vector3 vec = pt - camPos; + float lambda = -camPos.z / vec.z; + pt.x = camPos.x + lambda * vec.x; + pt.y = camPos.y + lambda * vec.y; + pt.z = 0; + + vb.vertices[i] = pt; + } + } + + mesh.Clear(); + mesh.SetVertices(vb.vertices); + if (vb._isArbitraryQuad) + mesh.SetUVs(0, vb.FixUVForArbitraryQuad()); + else + mesh.SetUVs(0, vb.uvs); + mesh.SetColors(vb.colors); + mesh.SetTriangles(vb.triangles, 0); + if (vb.uvs2.Count == vb.uvs.Count) + mesh.SetUVs(1, vb.uvs2); + vb.End(); + + if (meshModifier != null) + meshModifier(); + } + + public void OnPopulateMesh(VertexBuffer vb) + { + Rect rect = texture.GetDrawRect(vb.contentRect, flip); + + vb.AddQuad(rect, vb.vertexColor, vb.uvRect); + vb.AddTriangles(); + vb._isArbitraryQuad = _vertexMatrix != null; + } + + public NGraphics CreateSubInstance(string name) + { + if (subInstances == null) + subInstances = new List(); + + GameObject newGameObject = new GameObject(name); + newGameObject.transform.SetParent(gameObject.transform, false); + newGameObject.layer = gameObject.layer; + newGameObject.hideFlags = gameObject.hideFlags; + + var newGraphics = new NGraphics(newGameObject); + newGraphics._vertexMatrix = _vertexMatrix; + return newGraphics; + } + + class StencilEraser + { + public GameObject gameObject; + public MeshFilter meshFilter; + public MeshRenderer meshRenderer; + + public StencilEraser(Transform parent) + { + gameObject = new GameObject("StencilEraser"); + gameObject.transform.SetParent(parent, false); + + meshFilter = gameObject.AddComponent(); + meshRenderer = gameObject.AddComponent(); + meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + meshRenderer.reflectionProbeUsage = UnityEngine.Rendering.ReflectionProbeUsage.Off; + meshRenderer.receiveShadows = false; + + gameObject.layer = parent.gameObject.layer; + gameObject.hideFlags = parent.gameObject.hideFlags; + meshFilter.hideFlags = parent.gameObject.hideFlags; + meshRenderer.hideFlags = parent.gameObject.hideFlags; + } + + public bool enabled + { + get { return meshRenderer.enabled; } + set { meshRenderer.enabled = value; } + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs.meta new file mode 100644 index 0000000..020c3c8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/NGraphics.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b84f79fb60acc974cb58c5368b257716 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs b/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs new file mode 100644 index 0000000..3d3e34a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs @@ -0,0 +1,555 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace FairyGUI +{ + /// + /// + /// + public enum DestroyMethod + { + Destroy, + Unload, + None, + ReleaseTemp, + Custom + } + + /// + /// + /// + public class NTexture + { + /// + /// This event will trigger when a texture is destroying if its destroyMethod is Custom + /// + public static event Action CustomDestroyMethod; + + /// + /// + /// + public Rect uvRect; + + /// + /// + /// + public bool rotated; + + /// + /// + /// + public int refCount; + + /// + /// + /// + public float lastActive; + + /// + /// + /// + public DestroyMethod destroyMethod; + + /// + /// This event will trigger when texture reloaded and size changed. + /// + public event Action onSizeChanged; + + /// + /// This event will trigger when ref count is zero. + /// + public event Action onRelease; + + Texture _nativeTexture; + Texture _alphaTexture; + + Rect _region; + Vector2 _offset; + Vector2 _originalSize; + + NTexture _root; + Dictionary _materialManagers; + + internal static Texture2D CreateEmptyTexture() + { + Texture2D emptyTexture = new Texture2D(1, 1, TextureFormat.RGB24, false); + emptyTexture.name = "White Texture"; + emptyTexture.hideFlags = DisplayObject.hideFlags; + emptyTexture.SetPixel(0, 0, Color.white); + emptyTexture.Apply(); + return emptyTexture; + } + + static NTexture _empty; + + /// + /// + /// + public static NTexture Empty + { + get + { + if (_empty == null) + _empty = new NTexture(CreateEmptyTexture()); + + return _empty; + } + } + + /// + /// + /// + public static void DisposeEmpty() + { + if (_empty != null) + { + NTexture tmp = _empty; + _empty = null; + tmp.Dispose(); + } + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + DisposeEmpty(); + CustomDestroyMethod = null; + } +#endif + + /// + /// + /// + /// + public NTexture(Texture texture) : this(texture, null, 1, 1) + { + } + + /// + /// + /// + /// + /// + /// + public NTexture(Texture texture, Texture alphaTexture, float xScale, float yScale) + { + _root = this; + _nativeTexture = texture; + _alphaTexture = alphaTexture; + uvRect = new Rect(0, 0, xScale, yScale); + if (yScale < 0) + { + uvRect.y = -yScale; + uvRect.yMax = 0; + } + if (xScale < 0) + { + uvRect.x = -xScale; + uvRect.xMax = 0; + } + if (_nativeTexture != null) + _originalSize = new Vector2(_nativeTexture.width, _nativeTexture.height); + _region = new Rect(0, 0, _originalSize.x, _originalSize.y); + } + + /// + /// + /// + /// + /// + public NTexture(Texture texture, Rect region) + { + _root = this; + _nativeTexture = texture; + _region = region; + _originalSize = new Vector2(_region.width, _region.height); + if (_nativeTexture != null) + uvRect = new Rect(region.x / _nativeTexture.width, 1 - region.yMax / _nativeTexture.height, + region.width / _nativeTexture.width, region.height / _nativeTexture.height); + else + uvRect.Set(0, 0, 1, 1); + } + + /// + /// + /// + /// + /// + /// + public NTexture(NTexture root, Rect region, bool rotated) + { + _root = root; + this.rotated = rotated; + region.x += root._region.x; + region.y += root._region.y; + uvRect = new Rect(region.x * root.uvRect.width / root.width, 1 - region.yMax * root.uvRect.height / root.height, + region.width * root.uvRect.width / root.width, region.height * root.uvRect.height / root.height); + if (rotated) + { + float tmp = region.width; + region.width = region.height; + region.height = tmp; + + tmp = uvRect.width; + uvRect.width = uvRect.height; + uvRect.height = tmp; + } + _region = region; + _originalSize = _region.size; + } + + /// + /// + /// + /// + /// + /// + /// + /// + public NTexture(NTexture root, Rect region, bool rotated, Vector2 originalSize, Vector2 offset) + : this(root, region, rotated) + { + _originalSize = originalSize; + _offset = offset; + } + + /// + /// + /// + /// + public NTexture(Sprite sprite) + { + Rect rect = sprite.textureRect; + rect.y = sprite.texture.height - rect.yMax; + + _root = this; + _nativeTexture = sprite.texture; + _region = rect; + _originalSize = new Vector2(_region.width, _region.height); + uvRect = new Rect(_region.x / _nativeTexture.width, 1 - _region.yMax / _nativeTexture.height, + _region.width / _nativeTexture.width, _region.height / _nativeTexture.height); + } + + /// + /// + /// + public int width + { + get { return (int)_region.width; } + } + + /// + /// + /// + public int height + { + get { return (int)_region.height; } + } + + /// + /// + /// + public Vector2 offset + { + get { return _offset; } + set { _offset = value; } + } + + /// + /// + /// + public Vector2 originalSize + { + get { return _originalSize; } + set { _originalSize = value; } + } + + /// + /// + /// + /// + /// + public Rect GetDrawRect(Rect drawRect) + { + return GetDrawRect(drawRect, FlipType.None); + } + + /// + /// + /// + /// + /// + /// + public Rect GetDrawRect(Rect drawRect, FlipType flip) + { + if (_originalSize.x == _region.width && _originalSize.y == _region.height) + return drawRect; + + float sx = drawRect.width / _originalSize.x; + float sy = drawRect.height / _originalSize.y; + Rect rect = new Rect(_offset.x * sx, _offset.y * sy, _region.width * sx, _region.height * sy); + + if (flip != FlipType.None) + { + if (flip == FlipType.Horizontal || flip == FlipType.Both) + { + rect.x = drawRect.width - rect.xMax; + } + if (flip == FlipType.Vertical || flip == FlipType.Both) + { + rect.y = drawRect.height - rect.yMax; + } + } + + return rect; + } + + /// + /// + /// + /// + public void GetUV(Vector2[] uv) + { + uv[0] = uvRect.position; + uv[1] = new Vector2(uvRect.xMin, uvRect.yMax); + uv[2] = new Vector2(uvRect.xMax, uvRect.yMax); + uv[3] = new Vector2(uvRect.xMax, uvRect.yMin); + if (rotated) + { + float xMin = uvRect.xMin; + float yMin = uvRect.yMin; + float yMax = uvRect.yMax; + + float tmp; + for (int i = 0; i < 4; i++) + { + Vector2 m = uv[i]; + tmp = m.y; + m.y = yMin + m.x - xMin; + m.x = xMin + yMax - tmp; + uv[i] = m; + } + } + } + + /// + /// + /// + public NTexture root + { + get { return _root; } + } + + /// + /// + /// + public bool disposed + { + get { return _root == null; } + } + + /// + /// + /// + public Texture nativeTexture + { + get { return _root != null ? _root._nativeTexture : null; } + } + + /// + /// + /// + public Texture alphaTexture + { + get { return _root != null ? _root._alphaTexture : null; } + } + + /// + /// + /// + public MaterialManager GetMaterialManager(string shaderName) + { + if (_root != this) + { + if (_root == null) + return null; + else + return _root.GetMaterialManager(shaderName); + } + + if (_materialManagers == null) + _materialManagers = new Dictionary(); + + MaterialManager mm; + if (!_materialManagers.TryGetValue(shaderName, out mm)) + { + mm = new MaterialManager(this, ShaderConfig.GetShader(shaderName)); + _materialManagers.Add(shaderName, mm); + } + + return mm; + } + + /// + /// + /// + public void Unload() + { + Unload(false); + } + + /// + /// + /// + public void Unload(bool destroyMaterials) + { + if (this == _empty) + return; + + if (_root != this) + throw new Exception("Unload is not allow to call on none root NTexture."); + + if (_nativeTexture != null) + { + DestroyTexture(); + + if (destroyMaterials) + DestroyMaterials(); + else + RefreshMaterials(); + } + } + + /// + /// + /// + /// + /// + public void Reload(Texture nativeTexture, Texture alphaTexture) + { + if (_root != this) + throw new System.Exception("Reload is not allow to call on none root NTexture."); + + if (_nativeTexture != null && _nativeTexture != nativeTexture) + DestroyTexture(); + + _nativeTexture = nativeTexture; + _alphaTexture = alphaTexture; + + Vector2 lastSize = _originalSize; + if (_nativeTexture != null) + _originalSize = new Vector2(_nativeTexture.width, _nativeTexture.height); + else + _originalSize = Vector2.zero; + _region = new Rect(0, 0, _originalSize.x, _originalSize.y); + + RefreshMaterials(); + + if (onSizeChanged != null && lastSize != _originalSize) + onSizeChanged(this); + } + + void DestroyTexture() + { + switch (destroyMethod) + { + case DestroyMethod.Destroy: + Object.DestroyImmediate(_nativeTexture, true); + if (_alphaTexture != null) + Object.DestroyImmediate(_alphaTexture, true); + break; + case DestroyMethod.Unload: + Resources.UnloadAsset(_nativeTexture); + if (_alphaTexture != null) + Resources.UnloadAsset(_alphaTexture); + break; + case DestroyMethod.ReleaseTemp: + RenderTexture.ReleaseTemporary((RenderTexture)_nativeTexture); + if (_alphaTexture is RenderTexture) + RenderTexture.ReleaseTemporary((RenderTexture)_alphaTexture); + break; + case DestroyMethod.Custom: + if (CustomDestroyMethod == null) + Debug.LogWarning("NTexture.CustomDestroyMethod must be set to handle DestroyMethod.Custom"); + else + { + CustomDestroyMethod(_nativeTexture); + if (_alphaTexture != null) + CustomDestroyMethod(_alphaTexture); + } + break; + } + + _nativeTexture = null; + _alphaTexture = null; + } + + void RefreshMaterials() + { + if (_materialManagers != null && _materialManagers.Count > 0) + { + Dictionary.Enumerator iter = _materialManagers.GetEnumerator(); + while (iter.MoveNext()) + iter.Current.Value.RefreshMaterials(); + iter.Dispose(); + } + } + + void DestroyMaterials() + { + if (_materialManagers != null && _materialManagers.Count > 0) + { + Dictionary.Enumerator iter = _materialManagers.GetEnumerator(); + while (iter.MoveNext()) + iter.Current.Value.DestroyMaterials(); + iter.Dispose(); + } + } + + public void AddRef() + { + if (_root == null) //disposed + return; + + if (_root != this && refCount == 0) + _root.AddRef(); + + refCount++; + } + + public void ReleaseRef() + { + if (_root == null) //disposed + return; + + refCount--; + + if (refCount == 0) + { + if (_root != this) + _root.ReleaseRef(); + + if (onRelease != null) + onRelease(this); + } + } + + /// + /// + /// + public void Dispose() + { + if (this == _empty) + return; + + if (_root == this) + Unload(true); + _root = null; + onSizeChanged = null; + onRelease = null; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs.meta new file mode 100644 index 0000000..d4340ed --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/NTexture.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cdb420f5e4ef87d419c4467d1b8f2ddf +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs b/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs new file mode 100644 index 0000000..c7e83e0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs @@ -0,0 +1,103 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public static class ShaderConfig + { + /// + /// + /// + /// + /// + public delegate Shader GetFunction(string name); + + /// + /// + /// + public static GetFunction Get = Shader.Find; + + /// + /// + /// + public static string imageShader = "FairyGUI/Image"; + + /// + /// + /// + public static string textShader = "FairyGUI/Text"; + + /// + /// + /// + public static string bmFontShader = "FairyGUI/BMFont"; + + /// + /// + /// + public static string TMPFontShader = "FairyGUI/TMP"; + + public static int ID_ClipBox; + public static int ID_ClipSoftness; + public static int ID_AlphaTex; + public static int ID_StencilComp; + public static int ID_Stencil; + public static int ID_StencilOp; + public static int ID_StencilReadMask; + public static int ID_ColorMask; + public static int ID_ColorMatrix; + public static int ID_ColorOffset; + public static int ID_BlendSrcFactor; + public static int ID_BlendDstFactor; + public static int ID_ColorOption; + + public static int ID_Stencil2; + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + Get = Shader.Find; + } +#endif + + static ShaderConfig() + { + ID_ClipBox = Shader.PropertyToID("_ClipBox"); + ID_ClipSoftness = Shader.PropertyToID("_ClipSoftness"); + ID_AlphaTex = Shader.PropertyToID("_AlphaTex"); + ID_StencilComp = Shader.PropertyToID("_StencilComp"); + ID_Stencil = Shader.PropertyToID("_Stencil"); + ID_StencilOp = Shader.PropertyToID("_StencilOp"); + ID_StencilReadMask = Shader.PropertyToID("_StencilReadMask"); + ID_ColorMask = Shader.PropertyToID("_ColorMask"); + ID_ColorMatrix = Shader.PropertyToID("_ColorMatrix"); + ID_ColorOffset = Shader.PropertyToID("_ColorOffset"); + ID_BlendSrcFactor = Shader.PropertyToID("_BlendSrcFactor"); + ID_BlendDstFactor = Shader.PropertyToID("_BlendDstFactor"); + ID_ColorOption = Shader.PropertyToID("_ColorOption"); + + ID_Stencil2 = Shader.PropertyToID("_StencilRef"); + } + + /// + /// + /// + /// + /// + public static Shader GetShader(string name) + { + Shader shader = Get(name); + if (shader == null) + { + Debug.LogWarning("FairyGUI: shader not found: " + name); + shader = Shader.Find("UI/Default"); + } + shader.hideFlags = DisplayObject.hideFlags; + + return shader; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs.meta new file mode 100644 index 0000000..eec7dfb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/ShaderConfig.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c4eae4be32683c04a96ac1c4cd1834ab +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs new file mode 100644 index 0000000..365e52a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs @@ -0,0 +1,250 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class Shape : DisplayObject + { + /// + /// + /// + public Shape() + { + CreateGameObject("Shape"); + graphics = new NGraphics(gameObject); + graphics.texture = NTexture.Empty; + graphics.meshFactory = null; + } + + /// + /// + /// + public Color color + { + get + { + return graphics.color; + } + set + { + graphics.color = value; + graphics.SetMeshDirty(); + } + } + + /// + /// + /// + /// + /// + /// + public void DrawRect(float lineSize, Color lineColor, Color fillColor) + { + RectMesh mesh = graphics.GetMeshFactory(); + mesh.lineWidth = lineSize; + mesh.lineColor = lineColor; + mesh.fillColor = null; + mesh.colors = null; + + graphics.color = fillColor; + graphics.SetMeshDirty(); + } + + /// + /// + /// + /// + /// + public void DrawRect(float lineSize, Color32[] colors) + { + RectMesh mesh = graphics.GetMeshFactory(); + mesh.lineWidth = lineSize; + mesh.colors = colors; + + graphics.SetMeshDirty(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void DrawRoundRect(float lineSize, Color lineColor, Color fillColor, + float topLeftRadius, float topRightRadius, float bottomLeftRadius, float bottomRightRadius) + { + RoundedRectMesh mesh = graphics.GetMeshFactory(); + mesh.lineWidth = lineSize; + mesh.lineColor = lineColor; + mesh.fillColor = null; + mesh.topLeftRadius = topLeftRadius; + mesh.topRightRadius = topRightRadius; + mesh.bottomLeftRadius = bottomLeftRadius; + mesh.bottomRightRadius = bottomRightRadius; + + graphics.color = fillColor; + graphics.SetMeshDirty(); + } + + /// + /// + /// + /// + public void DrawEllipse(Color fillColor) + { + EllipseMesh mesh = graphics.GetMeshFactory(); + mesh.lineWidth = 0; + mesh.startDegree = 0; + mesh.endDegreee = 360; + mesh.fillColor = null; + mesh.centerColor = null; + + graphics.color = fillColor; + graphics.SetMeshDirty(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void DrawEllipse(float lineSize, Color centerColor, Color lineColor, Color fillColor, float startDegree, float endDegree) + { + EllipseMesh mesh = graphics.GetMeshFactory(); + mesh.lineWidth = lineSize; + if (centerColor.Equals(fillColor)) + mesh.centerColor = null; + else + mesh.centerColor = centerColor; + mesh.lineColor = lineColor; + mesh.fillColor = null; + mesh.startDegree = startDegree; + mesh.endDegreee = endDegree; + + graphics.color = fillColor; + graphics.SetMeshDirty(); + } + + /// + /// + /// + /// + /// + public void DrawPolygon(IList points, Color fillColor) + { + PolygonMesh mesh = graphics.GetMeshFactory(); + mesh.points.Clear(); + mesh.points.AddRange(points); + mesh.fillColor = null; + mesh.colors = null; + + graphics.color = fillColor; + graphics.SetMeshDirty(); + } + + /// + /// + /// + /// + /// + public void DrawPolygon(IList points, Color32[] colors) + { + PolygonMesh mesh = graphics.GetMeshFactory(); + mesh.points.Clear(); + mesh.points.AddRange(points); + mesh.fillColor = null; + mesh.colors = colors; + + graphics.SetMeshDirty(); + } + + /// + /// + /// + /// + /// + /// + /// + public void DrawPolygon(IList points, Color fillColor, float lineSize, Color lineColor) + { + PolygonMesh mesh = graphics.GetMeshFactory(); + mesh.points.Clear(); + mesh.points.AddRange(points); + mesh.fillColor = null; + mesh.lineWidth = lineSize; + mesh.lineColor = lineColor; + mesh.colors = null; + + graphics.color = fillColor; + graphics.SetMeshDirty(); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void DrawRegularPolygon(int sides, float lineSize, Color? centerColor, Color lineColor, Color fillColor, float rotation, float[] distances) + { + RegularPolygonMesh mesh = graphics.GetMeshFactory(); + mesh.sides = sides; + mesh.lineWidth = lineSize; + mesh.centerColor = centerColor; + mesh.lineColor = lineColor; + mesh.fillColor = null; + mesh.rotation = rotation; + mesh.distances = distances; + + graphics.color = fillColor; + graphics.SetMeshDirty(); + } + + /// + /// + /// + public void Clear() + { + graphics.meshFactory = null; + } + + /// + /// + /// + public bool isEmpty + { + get { return graphics.meshFactory == null; } + } + + protected override DisplayObject HitTest() + { + if (graphics.meshFactory == null) + return null; + + Vector2 localPoint = WorldToLocal(HitTestContext.worldPoint, HitTestContext.direction); + + IHitTest ht = graphics.meshFactory as IHitTest; + if (ht != null) + return ht.HitTest(_contentRect, localPoint) ? this : null; + else if (_contentRect.Contains(localPoint)) + return this; + else + return null; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs.meta new file mode 100644 index 0000000..7e6d83d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Shape.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cbcf11c269a33474aa9adaafd9867711 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs new file mode 100644 index 0000000..5dd5d26 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs @@ -0,0 +1,1815 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.SceneManagement; + +#if FAIRYGUI_INPUT_SYSTEM +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.EnhancedTouch; +using TouchPhase = UnityEngine.InputSystem.TouchPhase; +using Touch = UnityEngine.InputSystem.EnhancedTouch.Touch; +#endif + +namespace FairyGUI +{ + /// + /// + /// + public class Stage : Container + { + [Obsolete("Use size.y")] + public int stageHeight { get { return (int)_contentRect.height; } } + + [Obsolete("Use size.x")] + public int stageWidth { get { return (int)_contentRect.width; } } + + /// + /// + /// + public float soundVolume { get; set; } + + public event Action beforeUpdate; + public event Action afterUpdate; + + DisplayObject _touchTarget; + DisplayObject _focused; + InputTextField _lastInput; + UpdateContext _updateContext; + List _rollOutChain; + List _rollOverChain; + TouchInfo[] _touches; + int _touchCount; + Vector2 _touchPosition; + int _frameGotHitTarget; + int _frameGotTouchPosition; + bool _customInput; + Vector2 _customInputPos; + bool _customInputButtonDown; + AudioSource _audio; + List _toCollectTextures = new List(); + EventListener _onStageResized; + List _focusOutChain; + List _focusInChain; + List _focusHistory; + Container _nextFocus; + class CursorDef + { + public Texture2D texture; + public Vector2 hotspot; + } + Dictionary _cursors; + string _currentCursor; + + static bool _touchScreen; + static bool _keyboardInput; + static bool _touchSupportDetected; + internal static int _clickTestThreshold; + static IKeyboard _keyboard; + static bool _keyboardOpened; + + static Stage _inst; + /// + /// + /// + public static Stage inst + { + get + { + if (_inst == null) + Instantiate(); + + return _inst; + } + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + if (_inst != null) + { + _inst.Dispose(); + _inst = null; + } + + _touchSupportDetected = false; + } +#endif + + /// + /// + /// + public static void Instantiate() + { + if (_inst == null) + { + _inst = new Stage(); + GRoot._inst = new GRoot(); + GRoot._inst.ApplyContentScaleFactor(); + _inst.AddChild(GRoot._inst.displayObject); + + StageCamera.CheckMainCamera(); + } + } + + /// + /// 如果是true,表示触摸输入,将使用Input.GetTouch接口读取触摸屏输入。 + /// 如果是false,表示使用鼠标输入,将使用Input.GetMouseButtonXXX接口读取鼠标输入。 + /// 一般来说,不需要设置,底层会自动根据系统环境设置正确的值。 + /// + public static bool touchScreen + { + get { return _touchScreen; } + set + { + _touchScreen = value; + if (_touchScreen) + { +#if !(UNITY_WEBPLAYER || UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || UNITY_EDITOR) + keyboardInput = true; +#endif + _clickTestThreshold = 50; + _touchSupportDetected = true; + } + else + { + keyboardInput = false; + _keyboardOpened = false; + inst.ResetInputState(); + _clickTestThreshold = 10; + } + } + } + + /// + /// 如果是true,表示使用屏幕上弹出的键盘输入文字。常见于移动设备。 + /// 如果是false,表示是接受按键消息输入文字。常见于PC。 + /// 一般来说,不需要设置,底层会自动根据系统环境设置正确的值。 + /// + public static bool keyboardInput + { + get { return _keyboardInput; } + set + { + _keyboardInput = value; + if (value && _keyboard == null) + { +#if !(UNITY_WEBPLAYER || UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || UNITY_EDITOR) + _keyboard = new TouchScreenKeyboard(); +#endif + } + } + } + + /// + /// + /// + public static IKeyboard keyboard + { + get { return _keyboard; } + set { _keyboard = value; } + } + + /// + /// + /// + public static bool isTouchOnUI + { + get + { + return _inst != null && _inst.touchTarget != null; + } + } + + /// + /// As unity does not provide ways to detect this, you should set it by yourself. + /// This will effect: + /// 1. compoistion cursor pos. + /// 2. mouse wheel speed. + /// + public static float devicePixelRatio + { + get; set; + } + + /// + /// The scale of the mouse scroll delta. + /// + public static float mouseWheelScale + { + get; set; + } + + /// + /// + /// + public Stage() : base() + { + _inst = this; + soundVolume = 1; + + _updateContext = new UpdateContext(); + _frameGotHitTarget = -1; + + _touches = new TouchInfo[5]; + for (int i = 0; i < _touches.Length; i++) + _touches[i] = new TouchInfo(); + +#if FAIRYGUI_INPUT_SYSTEM + if (Touchscreen.current != null && !EnhancedTouchSupport.enabled) + EnhancedTouchSupport.Enable(); +#endif + + bool isOSX = Application.platform == RuntimePlatform.OSXPlayer + || Application.platform == RuntimePlatform.OSXEditor; + + if (Application.platform == RuntimePlatform.WindowsPlayer + || Application.platform == RuntimePlatform.WindowsEditor + || Application.platform == RuntimePlatform.WebGLPlayer + || isOSX) + touchScreen = false; + else + { +#if FAIRYGUI_INPUT_SYSTEM + touchScreen = Touchscreen.current != null; +#else + touchScreen = Input.touchSupported; +#endif + } + + // 在PC上,是否retina屏对输入法位置,鼠标滚轮速度都有影响,但现在没发现Unity有获得的方式。仅判断是否Mac可能不够(外接显示器的情况)。所以最好自行设置。 + devicePixelRatio = (isOSX && Screen.dpi > 96) ? 2 : 1; + mouseWheelScale = 1; + + _rollOutChain = new List(); + _rollOverChain = new List(); + _focusOutChain = new List(); + _focusInChain = new List(); + _focusHistory = new List(); + _cursors = new Dictionary(); + + SetSize(Screen.width, Screen.height); + cachedTransform.localScale = new Vector3(StageCamera.DefaultUnitsPerPixel, StageCamera.DefaultUnitsPerPixel, StageCamera.DefaultUnitsPerPixel); + +#if UNITY_2022_2_OR_NEWER + StageEngine engine = GameObject.FindFirstObjectByType(); +#else + StageEngine engine = GameObject.FindObjectOfType(); +#endif + if (engine != null) + UnityEngine.Object.Destroy(engine.gameObject); + + gameObject.name = "Stage"; + gameObject.layer = LayerMask.NameToLayer(StageCamera.LayerName); + gameObject.AddComponent(); + gameObject.AddComponent(); + gameObject.SetActive(true); + UnityEngine.Object.DontDestroyOnLoad(gameObject); + + EnableSound(); + + Timers.inst.Add(5, 0, RunTextureCollector); + + SceneManager.sceneLoaded += SceneManager_sceneLoaded; + +#if FAIRYGUI_INPUT_SYSTEM + InputTextField.RegisterEvent(); +#endif + } + + void SceneManager_sceneLoaded(Scene scene, LoadSceneMode mode) + { + StageCamera.CheckMainCamera(); + } + + public override void Dispose() + { + base.Dispose(); + +#if FAIRYGUI_INPUT_SYSTEM + InputTextField.UnregisterEvent(); +#endif + + Timers.inst.Remove(RunTextureCollector); + + SceneManager.sceneLoaded -= SceneManager_sceneLoaded; + } + + /// + /// + /// + public EventListener onStageResized + { + get { return _onStageResized ?? (_onStageResized = new EventListener(this, "onStageResized")); } + } + + /// + /// + /// + public DisplayObject touchTarget + { + get + { + if (_frameGotHitTarget != Time.frameCount) + GetHitTarget(); + + if (_touchTarget == this) + return null; + else + return _touchTarget; + } + } + + /// + /// + /// + public DisplayObject focus + { + get + { + if (_focused != null && _focused.isDisposed) + _focused = null; + return _focused; + } + set + { + SetFocus(value); + } + } + + public void SetFocus(DisplayObject newFocus, bool byKey = false) + { + if (newFocus == this) + newFocus = null; + + _nextFocus = null; + + if (_focused == newFocus) + return; + + Container navRoot = null; + DisplayObject element = newFocus; + while (element != null) + { + if (!element.focusable) + return; + else if ((element is Container) && ((Container)element).tabStopChildren) + { + if (navRoot == null) + navRoot = element as Container; + } + + element = element.parent; + } + + DisplayObject oldFocus = _focused; + _focused = newFocus; + + if (navRoot != null) + { + navRoot._lastFocus = _focused; + int pos = _focusHistory.IndexOf(navRoot); + if (pos != -1) + { + if (pos < _focusHistory.Count - 1) + _focusHistory.RemoveRange(pos + 1, _focusHistory.Count - pos - 1); + } + else + { + _focusHistory.Add(navRoot); + if (_focusHistory.Count > 10) + _focusHistory.RemoveAt(0); + } + } + + _focusInChain.Clear(); + _focusOutChain.Clear(); + + element = oldFocus; + while (element != null) + { + if (element.focusable) + _focusOutChain.Add(element); + element = element.parent; + } + + element = _focused; + int i; + while (element != null) + { + i = _focusOutChain.IndexOf(element); + if (i != -1) + { + _focusOutChain.RemoveRange(i, _focusOutChain.Count - i); + break; + } + if (element.focusable) + _focusInChain.Add(element); + + element = element.parent; + } + + int cnt = _focusOutChain.Count; + if (cnt > 0) + { + for (i = 0; i < cnt; i++) + { + element = _focusOutChain[i]; + if (element.stage != null) + { + element.DispatchEvent("onFocusOut", null); + if (_focused != newFocus) //focus changed in event + return; + } + } + _focusOutChain.Clear(); + } + + cnt = _focusInChain.Count; + if (cnt > 0) + { + for (i = 0; i < cnt; i++) + { + element = _focusInChain[i]; + if (element.stage != null) + { + element.DispatchEvent("onFocusIn", byKey ? "key" : null); + if (_focused != newFocus) //focus changed in event + return; + } + } + _focusInChain.Clear(); + } + + if (_focused is InputTextField) + _lastInput = (InputTextField)_focused; + } + + internal void _OnFocusRemoving(Container sender) + { + _nextFocus = sender; + if (_focusHistory.Count > 0) + { + int i = _focusHistory.Count - 1; + DisplayObject test = _focusHistory[i]; + DisplayObject element = _focused; + while (element != null && element != sender) + { + if ((element is Container) && ((Container)element).tabStopChildren && element == test) + { + i--; + if (i < 0) + break; + + test = _focusHistory[i]; + } + + element = element.parent; + } + + if (i != _focusHistory.Count - 1) + { + _focusHistory.RemoveRange(i + 1, _focusHistory.Count - i - 1); + if (_focusHistory.Count > 0) + _nextFocus = _focusHistory[_focusHistory.Count - 1]; + } + } + + if (_focused is InputTextField) + _lastInput = null; + _focused = null; + } + + /// + /// + /// + /// + public void DoKeyNavigate(bool backward) + { + Container navBase = null; + DisplayObject element = _focused; + while (element != null) + { + if ((element is Container) && ((Container)element).tabStopChildren) + { + navBase = element as Container; + break; + } + + element = element.parent; + } + + if (navBase == null) + navBase = this; + + var it = navBase.GetDescendants(backward); + bool started = _focused == null; + DisplayObject test2 = _focused != null ? _focused.parent : null; + + while (it.MoveNext()) + { + DisplayObject dobj = it.Current; + if (started) + { + if (dobj == test2) + test2 = test2.parent; + else if (dobj._AcceptTab()) + return; + } + else if (dobj == _focused) + started = true; + } + + if (started) + { + it.Reset(); + while (it.MoveNext()) + { + DisplayObject dobj = it.Current; + if (dobj == _focused) + break; + + if (dobj == test2) + test2 = test2.parent; + else if (dobj._AcceptTab()) + return; + } + } + } + + /// + /// + /// + public Vector2 touchPosition + { + get + { + UpdateTouchPosition(); + return _touchPosition; + } + } + + /// + /// + /// + /// + /// + public Vector2 GetTouchPosition(int touchId) + { + UpdateTouchPosition(); + + if (touchId < 0) + return _touchPosition; + + for (int j = 0; j < 5; j++) + { + TouchInfo touch = _touches[j]; + if (touch.touchId == touchId) + return new Vector2(touch.x, touch.y); + } + + return _touchPosition; + } + + /// + /// + /// + /// + /// + public DisplayObject GetTouchTarget(int touchId) + { + if (_frameGotHitTarget != Time.frameCount) + GetHitTarget(); + + for (int j = 0; j < 5; j++) + { + TouchInfo touch = _touches[j]; + if (touch.touchId == touchId) + return touch.target != this ? touch.target : null; + } + + return null; + } + + + /// + /// + /// + public int touchCount + { + get { return _touchCount; } + } + + public int[] GetAllTouch(int[] result) + { + if (result == null) + result = new int[_touchCount]; + int i = 0; + for (int j = 0; j < 5; j++) + { + TouchInfo touch = _touches[j]; + if (touch.touchId != -1) + { + result[i++] = touch.touchId; + if (i >= result.Length) + break; + } + } + return result; + } + + /// + /// + /// + public void ResetInputState() + { + for (int j = 0; j < 5; j++) + _touches[j].Reset(); + + if (!touchScreen) + _touches[0].touchId = 0; + + _touchCount = 0; + } + + + /// + /// + /// + /// + public void CancelClick(int touchId) + { + for (int j = 0; j < 5; j++) + { + TouchInfo touch = _touches[j]; + if (touch.touchId == touchId) + touch.clickCancelled = true; + } + } + + /// + /// + /// + public void EnableSound() + { + if (_audio == null) + { + _audio = gameObject.AddComponent(); + _audio.bypassEffects = true; + } + } + + /// + /// + /// + public void DisableSound() + { + if (_audio != null) + { + UnityEngine.Object.Destroy(_audio); + _audio = null; + } + } + + /// + /// + /// + /// + /// + public void PlayOneShotSound(AudioClip clip, float volumeScale) + { + if (_audio != null && this.soundVolume > 0) + _audio.PlayOneShot(clip, volumeScale * this.soundVolume); + } + + /// + /// + /// + /// + public void PlayOneShotSound(AudioClip clip) + { + if (_audio != null && this.soundVolume > 0) + _audio.PlayOneShot(clip, this.soundVolume); + } + + + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void OpenKeyboard(string text, bool autocorrection, bool multiline, bool secure, + bool alert, string textPlaceholder, int keyboardType, bool hideInput) + { + if (_keyboard != null) + { + _keyboard.Open(text, autocorrection, multiline, secure, alert, textPlaceholder, keyboardType, hideInput); + _keyboardOpened = true; + } + } + + /// + /// + /// + public void CloseKeyboard() + { + if (_keyboard != null) + { + _keyboard.Close(); + } + } + + /// + /// 输入字符到当前光标位置 + /// + /// + public void InputString(string value) + { + if (_lastInput != null) + _lastInput.ReplaceSelection(value); + } + + /// + /// + /// + /// + /// + public void SetCustomInput(Vector2 screenPos, bool buttonDown) + { + _customInput = true; + _customInputButtonDown = buttonDown; + _customInputPos = screenPos; + _frameGotHitTarget = 0; + } + + /// + /// + /// + /// + /// + /// + public void SetCustomInput(Vector2 screenPos, bool buttonDown, bool buttonUp) + { + _customInput = true; + if (buttonDown) + _customInputButtonDown = true; + else if (buttonUp) + _customInputButtonDown = false; + _customInputPos = screenPos; + _frameGotHitTarget = 0; + } + + /// + /// + /// + /// + /// + public void SetCustomInput(ref RaycastHit hit, bool buttonDown) + { + Vector2 screenPos = HitTestContext.cachedMainCamera.WorldToScreenPoint(hit.point); + HitTestContext.CacheRaycastHit(HitTestContext.cachedMainCamera, ref hit); + SetCustomInput(screenPos, buttonDown); + } + + /// + /// + /// + /// + /// + /// + public void SetCustomInput(ref RaycastHit hit, bool buttonDown, bool buttonUp) + { + Vector2 screenPos = HitTestContext.cachedMainCamera.WorldToScreenPoint(hit.point); + HitTestContext.CacheRaycastHit(HitTestContext.cachedMainCamera, ref hit); + SetCustomInput(screenPos, buttonDown, buttonUp); + } + + public void ForceUpdate() + { + _updateContext.Begin(); + Update(_updateContext); + _updateContext.End(); + } + + internal void InternalUpdate() + { + HandleEvents(); + + if (_nextFocus != null) + { + if (_nextFocus.stage != null) + { + if (_nextFocus.tabStopChildren) + { + if (_nextFocus._lastFocus != null && _nextFocus.IsAncestorOf(_nextFocus._lastFocus)) + SetFocus(_nextFocus._lastFocus); + else + SetFocus(_nextFocus); + } + else + SetFocus(_nextFocus); + } + _nextFocus = null; + } + + if (beforeUpdate != null) + beforeUpdate(); + + _updateContext.Begin(); + Update(_updateContext); + _updateContext.End(); + + if (BaseFont.textRebuildFlag) + { + //字体贴图更改了,重新渲染一遍,防止本帧文字显示错误 + _updateContext.Begin(); + Update(_updateContext); + _updateContext.End(); + + BaseFont.textRebuildFlag = false; + } + + if (afterUpdate != null) + afterUpdate(); + } + + void GetHitTarget() + { + if (_frameGotHitTarget == Time.frameCount) + return; + + _frameGotHitTarget = Time.frameCount; + + if (_customInput) + { + Vector2 pos = _customInputPos; + pos.y = _contentRect.height - pos.y; + + TouchInfo touch = _touches[0]; + _touchTarget = HitTest(pos, true); + touch.target = _touchTarget; + } + else if (touchScreen) + { + _touchTarget = null; + +#if FAIRYGUI_INPUT_SYSTEM + foreach (Touch uTouch in Touch.activeTouches) + { + Vector2 pos = uTouch.screenPosition; + int touchId = uTouch.touchId; +#else + for (int i = 0; i < Input.touchCount; ++i) + { + Touch uTouch = Input.GetTouch(i); + Vector2 pos = uTouch.position; + int touchId = uTouch.fingerId; +#endif + + pos.y = _contentRect.height - pos.y; + + TouchInfo touch = null; + TouchInfo free = null; + for (int j = 0; j < 5; j++) + { + if (_touches[j].touchId == touchId) + { + touch = _touches[j]; + break; + } + + if (_touches[j].touchId == -1) + free = _touches[j]; + } + if (touch == null) + { + touch = free; + if (touch == null || uTouch.phase != TouchPhase.Began) + continue; + + touch.touchId = touchId; + } + + if (uTouch.phase == TouchPhase.Stationary) + _touchTarget = touch.target; + else + { + _touchTarget = HitTest(pos, true); + touch.target = _touchTarget; + } + } + } + else + { + Vector2 pos = Vector2.zero; +#if FAIRYGUI_INPUT_SYSTEM + Mouse mouse = Mouse.current; + if (mouse != null) + pos = mouse.position.ReadValue(); +#else + pos = Input.mousePosition; +#endif + pos.y = Screen.height - pos.y; + TouchInfo touch = _touches[0]; + if (float.IsNaN(pos.x) || float.IsNaN(pos.y) || float.IsInfinity(pos.x) || float.IsInfinity(pos.y)) //not a valid position + _touchTarget = this; + else if (pos.x < 0 || pos.y < 0) // outside of the window + _touchTarget = this; + else + _touchTarget = HitTest(pos, true); + touch.target = _touchTarget; + } + + HitTestContext.ClearRaycastHitCache(); + } + + internal void HandleScreenSizeChanged(int screenWidth, int screenHeight, float unitsPerPixel) + { + SetSize(screenWidth, screenHeight); + this.cachedTransform.localScale = new Vector3(unitsPerPixel, unitsPerPixel, unitsPerPixel); + + if (!DispatchEvent("onStageResized", null)) + { + UIContentScaler scaler = this.gameObject.GetComponent(); + scaler.ApplyChange(); + GRoot.inst.ApplyContentScaleFactor(); + } + } + + internal void HandleGUIEvents(Event evt) + { + if (evt.rawType == EventType.KeyDown) + { + if (InputTextField.EatKeyEvent(evt)) + return; + + TouchInfo touch = _touches[0]; + touch.keyCode = evt.keyCode; + touch.modifiers = evt.modifiers; + touch.character = evt.character; + + touch.UpdateEvent(); + DisplayObject f = this.focus; + if (f != null) + f.BubbleEvent("onKeyDown", touch.evt); + else + DispatchEvent("onKeyDown", touch.evt); + } + else if (evt.rawType == EventType.KeyUp) + { + if (InputTextField.EatKeyEvent(evt)) + return; + + TouchInfo touch = _touches[0]; + touch.keyCode = evt.keyCode; + touch.modifiers = evt.modifiers; + touch.character = evt.character; + + touch.UpdateEvent(); + DisplayObject f = this.focus; + if (f != null) + f.BubbleEvent("onKeyUp", touch.evt); + else + DispatchEvent("onKeyUp", touch.evt); + } +#if UNITY_2017_1_OR_NEWER + else if (evt.type == EventType.ScrollWheel) +#else + else if (evt.type == EventType.scrollWheel) +#endif + { + if (_touchTarget != null) + { + TouchInfo touch = _touches[0]; + touch.mouseWheelDelta = evt.delta.y * Stage.mouseWheelScale; + touch.UpdateEvent(); + _touchTarget.BubbleEvent("onMouseWheel", touch.evt); + touch.mouseWheelDelta = 0; + } + } + } + + void HandleEvents() + { + GetHitTarget(); + + UpdateTouchPosition(); + + if (_customInput) + { + HandleCustomInput(); + _customInput = false; + } + else + { + if (!_touchSupportDetected) + { + if (Application.platform == RuntimePlatform.WebGLPlayer) + { +#if FAIRYGUI_INPUT_SYSTEM + if (Touch.activeTouches.Count > 0) + touchScreen = true; +#else + if (Input.touchCount > 0) + touchScreen = true; +#endif + } + else + _touchSupportDetected = true; + } + if (touchScreen) + HandleTouchEvents(); + else + HandleMouseEvents(); + } + + if (_keyboardOpened) + HandleKeyboardInput(); + } + + void UpdateTouchPosition() + { + if (_frameGotTouchPosition != Time.frameCount) + { + _frameGotTouchPosition = Time.frameCount; + if (_customInput) + { + _touchPosition = _customInputPos; + _touchPosition.y = _contentRect.height - _touchPosition.y; + } + else if (touchScreen) + { +#if FAIRYGUI_INPUT_SYSTEM + if (Touch.activeTouches.Count > 0) + { + _touchPosition = Touch.activeTouches[Touch.activeTouches.Count - 1].screenPosition; + _touchPosition.y = _contentRect.height - _touchPosition.y; + } +#else + if (Input.touchCount > 0) + { + _touchPosition = Input.GetTouch(Input.touchCount - 1).position; + _touchPosition.y = _contentRect.height - _touchPosition.y; + } +#endif + } + else + { + Vector2 pos = Vector2.zero; +#if FAIRYGUI_INPUT_SYSTEM + Mouse mouse = Mouse.current; + if (mouse != null) + pos = mouse.position.ReadValue(); +#else + pos = Input.mousePosition; +#endif + if (pos.x >= 0 && pos.y >= 0) // 编辑器环境下坐标有时是负 + { + pos.y = _contentRect.height - pos.y; + _touchPosition = pos; + } + } + } + } + + void HandleKeyboardInput() + { + string s = _keyboard.GetInput(); + if (s != null) + { + InputTextField textField = _focused as InputTextField; + if (textField != null) + { + if (_keyboard.supportsCaret) + textField.ReplaceSelection(s); + else + textField.ReplaceText(s); + } + } + + if (_keyboard.done) + { + SetFocus(null); + _keyboardOpened = false; + } + } + + void HandleCustomInput() + { + Vector2 pos = _customInputPos; + pos.y = _contentRect.height - pos.y; + TouchInfo touch = _touches[0]; + + if (touch.x != pos.x || touch.y != pos.y) + { + touch.x = pos.x; + touch.y = pos.y; + touch.Move(); + } + + if (touch.lastRollOver != touch.target) + HandleRollOver(touch); + + if (_customInputButtonDown) + { + if (!touch.began) + { + _touchCount = 1; + touch.Begin(); + touch.button = 0; + touch.touchId = 0; + SetFocus(touch.target); + + touch.UpdateEvent(); + touch.target.BubbleEvent("onTouchBegin", touch.evt); + } + } + else if (touch.began) + { + _touchCount = 0; + touch.End(); + + DisplayObject clickTarget = touch.ClickTest(); + if (clickTarget != null) + { + touch.UpdateEvent(); + clickTarget.BubbleEvent("onClick", touch.evt); + } + + touch.button = -1; + } + } + + void HandleMouseEvents() + { + TouchInfo touch = _touches[0]; + if (touch.x != _touchPosition.x || touch.y != _touchPosition.y) + { + touch.x = _touchPosition.x; + touch.y = _touchPosition.y; + touch.Move(); + } + + if (touch.lastRollOver != touch.target) + HandleRollOver(touch); + +#if FAIRYGUI_INPUT_SYSTEM + Mouse mouse = Mouse.current; + if (mouse == null) + return; + + if (mouse.leftButton.wasPressedThisFrame || mouse.rightButton.wasPressedThisFrame || mouse.middleButton.wasPressedThisFrame) +#else + if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2)) +#endif + { + if (!touch.began) + { + _touchCount = 1; + touch.Begin(); +#if FAIRYGUI_INPUT_SYSTEM + touch.button = mouse.middleButton.wasPressedThisFrame ? 2 : (mouse.rightButton.wasPressedThisFrame ? 1 : 0); +#else + touch.button = Input.GetMouseButtonDown(2) ? 2 : (Input.GetMouseButtonDown(1) ? 1 : 0); +#endif + SetFocus(touch.target); + + touch.UpdateEvent(); + touch.target.BubbleEvent("onTouchBegin", touch.evt); + } + } + +#if FAIRYGUI_INPUT_SYSTEM + if (mouse.leftButton.wasReleasedThisFrame || mouse.rightButton.wasReleasedThisFrame || mouse.middleButton.wasReleasedThisFrame) +#else + if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1) || Input.GetMouseButtonUp(2)) +#endif + { + if (touch.began) + { + _touchCount = 0; + touch.End(); + + DisplayObject clickTarget = touch.ClickTest(); + if (clickTarget != null) + { + touch.UpdateEvent(); + +#if FAIRYGUI_INPUT_SYSTEM + if (mouse.rightButton.wasReleasedThisFrame || mouse.middleButton.wasReleasedThisFrame) +#else + if (Input.GetMouseButtonUp(1) || Input.GetMouseButtonUp(2)) +#endif + clickTarget.BubbleEvent("onRightClick", touch.evt); + else + clickTarget.BubbleEvent("onClick", touch.evt); + } + + touch.button = -1; + } + } + + // We have to do this, coz the cursor will auto change back after a click or dragging +#if FAIRYGUI_INPUT_SYSTEM + if (mouse.leftButton.wasReleasedThisFrame && _currentCursor != null) +#else + if (Input.GetMouseButtonUp(0) && _currentCursor != null) +#endif + _ChangeCursor(_currentCursor); + } + + void HandleTouchEvents() + { +#if FAIRYGUI_INPUT_SYSTEM + foreach (Touch uTouch in Touch.activeTouches) + { +#else + for (int i = 0; i < Input.touchCount; i++) + { + Touch uTouch = Input.GetTouch(i); +#endif + + if (uTouch.phase == TouchPhase.Stationary) + continue; + +#if FAIRYGUI_INPUT_SYSTEM + Vector2 pos = uTouch.screenPosition; +#else + Vector2 pos = uTouch.position; +#endif + pos.y = _contentRect.height - pos.y; + + TouchInfo touch = null; + for (int j = 0; j < 5; j++) + { +#if FAIRYGUI_INPUT_SYSTEM + if (_touches[j].touchId == uTouch.touchId) +#else + if (_touches[j].touchId == uTouch.fingerId) +#endif + { + touch = _touches[j]; + break; + } + } + if (touch == null) + continue; + + if (touch.x != pos.x || touch.y != pos.y) + { + touch.x = pos.x; + touch.y = pos.y; + if (touch.began) + touch.Move(); + } + + if (touch.lastRollOver != touch.target) + HandleRollOver(touch); + + if (uTouch.phase == TouchPhase.Began) + { + if (!touch.began) + { + _touchCount++; + touch.Begin(); + touch.button = 0; + SetFocus(touch.target); + + touch.UpdateEvent(); + touch.target.BubbleEvent("onTouchBegin", touch.evt); + } + } + else if (uTouch.phase == TouchPhase.Canceled || uTouch.phase == TouchPhase.Ended) + { + if (touch.began) + { + _touchCount--; + touch.End(); + + if (uTouch.phase != TouchPhase.Canceled) + { + DisplayObject clickTarget = touch.ClickTest(); + if (clickTarget != null) + { + touch.clickCount = uTouch.tapCount; + touch.UpdateEvent(); + clickTarget.BubbleEvent("onClick", touch.evt); + } + } + + touch.target = null; + HandleRollOver(touch); + + touch.touchId = -1; + } + } + } + } + + void HandleRollOver(TouchInfo touch) + { + DisplayObject element; + _rollOverChain.Clear(); + _rollOutChain.Clear(); + + element = touch.lastRollOver; + while (element != null) + { + _rollOutChain.Add(element); + element = element.parent; + } + + touch.lastRollOver = touch.target; + + string cursor = this.cursor; + if (cursor == null) + { + element = touch.target; + while (element != null) + { + if (element.cursor != null && cursor == null) + cursor = element.cursor; + element = element.parent; + } + } + + element = touch.target; + int i; + while (element != null) + { + i = _rollOutChain.IndexOf(element); + if (i != -1) + { + _rollOutChain.RemoveRange(i, _rollOutChain.Count - i); + break; + } + _rollOverChain.Add(element); + + element = element.parent; + } + + int cnt = _rollOutChain.Count; + if (cnt > 0) + { + for (i = 0; i < cnt; i++) + { + element = _rollOutChain[i]; + if (element.stage != null) + element.DispatchEvent("onRollOut", null); + } + _rollOutChain.Clear(); + } + + cnt = _rollOverChain.Count; + if (cnt > 0) + { + for (i = 0; i < cnt; i++) + { + element = _rollOverChain[i]; + if (element.stage != null) + element.DispatchEvent("onRollOver", null); + } + _rollOverChain.Clear(); + } + + if (cursor != _currentCursor) + _ChangeCursor(cursor); + } + + /// + /// 设置UIPanel/UIPainter等的渲染层次,由UIPanel等内部调用。开发者不需要调用。 + /// + /// + /// + public void ApplyPanelOrder(Container target) + { + int sortingOrder = target._panelOrder; + int numChildren = this.numChildren; + int i = 0; + int j; + int curIndex = -1; + for (; i < numChildren; i++) + { + DisplayObject obj = GetChildAt(i); + if (obj == target) + { + curIndex = i; + continue; + } + + if (obj == GRoot.inst.displayObject) + j = 1000; + else if (obj is Container) + j = ((Container)obj)._panelOrder; + else + continue; + + if (sortingOrder <= j) + { + if (curIndex != -1) + AddChildAt(target, i - 1); + else + AddChildAt(target, i); + break; + } + } + if (i == numChildren) + AddChild(target); + } + + + static List sTempList1; + static List sTempList2; + static Dictionary sTempDict; + + /// + /// Adjust display order of all UIPanels rendering in worldspace by their z order. + /// + /// Only UIPanel.sortingOrder equals to this value will be involve in this sorting + public void SortWorldSpacePanelsByZOrder(int panelSortingOrder) + { + if (sTempList1 == null) + { + sTempList1 = new List(); + sTempList2 = new List(); + sTempDict = new Dictionary(); + } + + int numChildren = this.numChildren; + for (int i = 0; i < numChildren; i++) + { + Container obj = GetChildAt(i) as Container; + if (obj == null || obj.renderMode != RenderMode.WorldSpace || obj._panelOrder != panelSortingOrder) + continue; + + sTempDict[obj.id] = i; + + sTempList1.Add(obj); + sTempList2.Add(i); + } + + sTempList1.Sort((DisplayObject c1, DisplayObject c2) => + { + int ret = c2.cachedTransform.position.z.CompareTo(c1.cachedTransform.position.z); + if (ret == 0) + { + //如果大家z值一样,使用原来的顺序,防止不停交换顺序(闪烁) + return sTempDict[c1.id].CompareTo(sTempDict[c2.id]); + } + else + return ret; + }); + + ChangeChildrenOrder(sTempList2, sTempList1); + + sTempList1.Clear(); + sTempList2.Clear(); + sTempDict.Clear(); + } + + /// + /// + /// + /// + public void MonitorTexture(NTexture texture) + { + if (_toCollectTextures.IndexOf(texture) == -1) + _toCollectTextures.Add(texture); + } + + void RunTextureCollector(object param) + { + int cnt = _toCollectTextures.Count; + float curTime = Time.time; + int i = 0; + while (i < cnt) + { + NTexture texture = _toCollectTextures[i]; + if (texture.disposed) + { + _toCollectTextures.RemoveAt(i); + cnt--; + } + else if (curTime - texture.lastActive > 5) + { + texture.Dispose(); + _toCollectTextures.RemoveAt(i); + cnt--; + } + else + i++; + } + } + + public void AddTouchMonitor(int touchId, EventDispatcher target) + { + TouchInfo touch = null; + for (int j = 0; j < 5; j++) + { + touch = _touches[j]; + if (touchId == -1 && touch.touchId != -1 + || touchId != -1 && touch.touchId == touchId) + break; + } + if (touch.touchMonitors.IndexOf(target) == -1) + touch.touchMonitors.Add(target); + } + + public void RemoveTouchMonitor(EventDispatcher target) + { + for (int j = 0; j < 5; j++) + { + TouchInfo touch = _touches[j]; + int i = touch.touchMonitors.IndexOf(target); + if (i != -1) + touch.touchMonitors[i] = null; + } + } + + public bool IsTouchMonitoring(EventDispatcher target) + { + for (int j = 0; j < 5; j++) + { + TouchInfo touch = _touches[j]; + int i = touch.touchMonitors.IndexOf(target); + if (i != -1) + return true; + } + + return false; + } + + internal Transform CreatePoolManager(string name) + { + GameObject go = new GameObject("[" + name + "]"); + go.SetActive(false); + + Transform t = go.transform; + t.SetParent(cachedTransform, false); + + return t; + } + + /// + /// + /// + /// + /// + /// + public void RegisterCursor(string cursorName, Texture2D texture, Vector2 hotspot) + { + _cursors[cursorName] = new CursorDef() { texture = texture, hotspot = hotspot }; + } + + /// + /// + /// + /// + public string activeCursor + { + get { return _currentCursor; } + } + + /// + /// + /// + /// + internal void _ChangeCursor(string cursorName) + { + CursorDef cursorDef; + if (cursorName != null && _cursors.TryGetValue(cursorName, out cursorDef)) + { + if (_currentCursor == cursorName) + Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); + _currentCursor = cursorName; + Cursor.SetCursor(cursorDef.texture, cursorDef.hotspot, CursorMode.Auto); + } + else + { + _currentCursor = null; + Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); + } + } + } + + class TouchInfo + { + public float x; + public float y; + public int touchId; + public int clickCount; + public KeyCode keyCode; + public char character; + public EventModifiers modifiers; + public float mouseWheelDelta; + public int button; + + public float downX; + public float downY; + public float downTime; + public int downFrame; + public bool began; + public bool clickCancelled; + public float lastClickTime; + public float lastClickX; + public float lastClickY; + public int lastClickButton; + public float holdTime; + public DisplayObject target; + public List downTargets; + public DisplayObject lastRollOver; + public List touchMonitors; + + public InputEvent evt; + + static List sHelperChain = new List(); + + public TouchInfo() + { + evt = new InputEvent(); + downTargets = new List(); + touchMonitors = new List(); + Reset(); + } + + public void Reset() + { + touchId = -1; + x = 0; + y = 0; + clickCount = 0; + button = -1; + keyCode = KeyCode.None; + character = '\0'; + modifiers = 0; + mouseWheelDelta = 0; + lastClickTime = 0; + began = false; + target = null; + downTargets.Clear(); + lastRollOver = null; + clickCancelled = false; + touchMonitors.Clear(); + } + + public void UpdateEvent() + { + evt.touchId = this.touchId; + evt.x = this.x; + evt.y = this.y; + evt.clickCount = this.clickCount; + evt.keyCode = this.keyCode; + evt.character = this.character; + evt.modifiers = this.modifiers; + evt.mouseWheelDelta = this.mouseWheelDelta; + evt.button = this.button; + evt.holdTime = this.holdTime; + } + + public void Begin() + { + began = true; + clickCancelled = false; + downX = x; + downY = y; + downTime = Time.unscaledTime; + downFrame = Time.frameCount; + holdTime = 0; + + downTargets.Clear(); + if (target != null) + { + downTargets.Add(target); + DisplayObject obj = target; + while (obj != null) + { + downTargets.Add(obj); + obj = obj.parent; + } + } + } + + public void Move() + { + if (began) + holdTime = (Time.frameCount - downFrame) == 1 ? (1f / Application.targetFrameRate) : (Time.unscaledTime - downTime); + + UpdateEvent(); + + if (Mathf.Abs(x - downX) > 50 || Mathf.Abs(y - downY) > 50) clickCancelled = true; + + if (touchMonitors.Count > 0) + { + int len = touchMonitors.Count; + for (int i = 0; i < len; i++) + { + EventDispatcher e = touchMonitors[i]; + if (e != null) + { + if ((e is DisplayObject) && ((DisplayObject)e).stage == null) + continue; + if ((e is GObject) && !((GObject)e).onStage) + continue; + e.GetChainBridges("onTouchMove", sHelperChain, false); + } + } + + Stage.inst.BubbleEvent("onTouchMove", evt, sHelperChain); + sHelperChain.Clear(); + } + else + Stage.inst.DispatchEvent("onTouchMove", evt); + } + + public void End() + { + began = false; + + if (downTargets.Count == 0 + || clickCancelled + || Mathf.Abs(x - downX) > Stage._clickTestThreshold + || Mathf.Abs(y - downY) > Stage._clickTestThreshold) + { + clickCancelled = true; + lastClickTime = 0; + clickCount = 1; + } + else + { + if (Time.unscaledTime - lastClickTime < 0.35f + && Mathf.Abs(x - lastClickX) < Stage._clickTestThreshold + && Mathf.Abs(y - lastClickY) < Stage._clickTestThreshold + && lastClickButton == button) + { + if (clickCount == 2) + clickCount = 1; + else + clickCount++; + } + else + clickCount = 1; + lastClickTime = Time.unscaledTime; + lastClickX = x; + lastClickY = y; + lastClickButton = button; + } + + //当间隔一帧时,使用帧率计算时间,避免掉帧因素 + holdTime = (Time.frameCount - downFrame) == 1 ? (1f / Application.targetFrameRate) : (Time.unscaledTime - downTime); + UpdateEvent(); + + if (touchMonitors.Count > 0) + { + int len = touchMonitors.Count; + for (int i = 0; i < len; i++) + { + EventDispatcher e = touchMonitors[i]; + if (e != null) + e.GetChainBridges("onTouchEnd", sHelperChain, false); + } + target.BubbleEvent("onTouchEnd", evt, sHelperChain); + + touchMonitors.Clear(); + sHelperChain.Clear(); + } + else + target.BubbleEvent("onTouchEnd", evt); + } + + public DisplayObject ClickTest() + { + if (clickCancelled) + { + downTargets.Clear(); + return null; + } + + DisplayObject obj = downTargets[0]; + if (obj.stage != null) //依然派发到原来的downTarget,虽然可能它已经偏离当前位置,主要是为了正确处理点击缩放的效果 + { + downTargets.Clear(); + return obj; + } + + obj = target; + while (obj != null) + { + int i = downTargets.IndexOf(obj); + if (i != -1 && obj.stage != null) + break; + + obj = obj.parent; + } + + downTargets.Clear(); + + return obj; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs.meta new file mode 100644 index 0000000..e7a4c01 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Stage.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6650441f8140eae4c896682b7fd5b3e6 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs b/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs new file mode 100644 index 0000000..c72a41e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs @@ -0,0 +1,201 @@ +using System; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// Stage Camera is an orthographic camera for UI rendering. + /// + [ExecuteInEditMode] + [AddComponentMenu("FairyGUI/UI Camera")] + public class StageCamera : MonoBehaviour + { + /// + /// + /// + public bool constantSize = true; + + /// + /// + /// + [NonSerialized] + public float unitsPerPixel = 0.02f; + + [NonSerialized] + public Transform cachedTransform; + [NonSerialized] + public Camera cachedCamera; + + [NonSerialized] + int screenWidth; + [NonSerialized] + int screenHeight; + [NonSerialized] + bool isMain; + [NonSerialized] + Display _display; + + /// + /// + /// + [NonSerialized] + public static Camera main; + + /// + /// + /// + [NonSerialized] + public static int screenSizeVer = 1; + + public const string Name = "Stage Camera"; + public const string LayerName = "UI"; + + public static float DefaultCameraSize = 5; + public static float DefaultUnitsPerPixel = 0.02f; + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void Init() + { + main = null; + } +#endif + + void OnEnable() + { + cachedTransform = this.transform; + cachedCamera = this.GetComponent(); + if (this.gameObject.name == Name) + { + main = cachedCamera; + isMain = true; + } + + if (Display.displays.Length > 1 && cachedCamera.targetDisplay != 0 && cachedCamera.targetDisplay < Display.displays.Length) + _display = Display.displays[cachedCamera.targetDisplay]; + + if (_display == null) + OnScreenSizeChanged(Screen.width, Screen.height); + else + OnScreenSizeChanged(_display.renderingWidth, _display.renderingHeight); + } + + void Update() + { + if (_display == null) + { + if (screenWidth != Screen.width || screenHeight != Screen.height) + OnScreenSizeChanged(Screen.width, Screen.height); + } + else + { + if (screenWidth != _display.renderingWidth || screenHeight != _display.renderingHeight) + OnScreenSizeChanged(_display.renderingWidth, _display.renderingHeight); + } + } + + void OnScreenSizeChanged(int newWidth, int newHeight) + { + if (newWidth == 0 || newHeight == 0) + return; + + screenWidth = newWidth; + screenHeight = newHeight; + + if (constantSize) + { + cachedCamera.orthographicSize = DefaultCameraSize; + unitsPerPixel = cachedCamera.orthographicSize * 2 / screenHeight; + } + else + { + unitsPerPixel = DefaultUnitsPerPixel; + cachedCamera.orthographicSize = screenHeight / 2 * unitsPerPixel; + } + cachedTransform.localPosition = new Vector3(cachedCamera.orthographicSize * screenWidth / screenHeight, -cachedCamera.orthographicSize); + + if (isMain) + { + screenSizeVer++; + if (Application.isPlaying) + Stage.inst.HandleScreenSizeChanged(screenWidth, screenHeight, unitsPerPixel); + else + { +#if UNITY_2022_2_OR_NEWER + UIContentScaler scaler = GameObject.FindFirstObjectByType(); +#else + UIContentScaler scaler = GameObject.FindObjectOfType(); +#endif + if (scaler != null) + scaler.ApplyChange(); + else + UIContentScaler.scaleFactor = 1; + } + } + } + + void OnRenderObject() + { + //Update和OnGUI在EditMode的调用都不那么及时,OnRenderObject则比较频繁,可以保证界面及时刷新。所以使用OnRenderObject + if (isMain && !Application.isPlaying) + { + EMRenderSupport.Update(); + } + } + + public void ApplyModifiedProperties() + { + screenWidth = 0; //force OnScreenSizeChanged called in next update + } + + /// + /// Check if there is a stage camera in the scene. If none, create one. + /// + public static void CheckMainCamera() + { + if (GameObject.Find(Name) == null) + { + int layer = LayerMask.NameToLayer(LayerName); + CreateCamera(Name, 1 << layer); + } + + HitTestContext.cachedMainCamera = Camera.main; + } + + /// + /// + /// + public static void CheckCaptureCamera() + { + if (GameObject.Find(Name) == null) + { + int layer = LayerMask.NameToLayer(LayerName); + CreateCamera(Name, 1 << layer); + } + } + + /// + /// + /// + /// + /// + /// + public static Camera CreateCamera(string name, int cullingMask) + { + GameObject cameraObject = new GameObject(name); + Camera camera = cameraObject.AddComponent(); + camera.depth = 1; + camera.cullingMask = cullingMask; + camera.clearFlags = CameraClearFlags.Depth; + camera.orthographic = true; + camera.orthographicSize = DefaultCameraSize; + camera.nearClipPlane = -30; + camera.farClipPlane = 30; + camera.stereoTargetEye = StereoTargetEyeMask.None; + camera.allowHDR = false; + camera.allowMSAA = false; + cameraObject.AddComponent(); + return camera; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs.meta new file mode 100644 index 0000000..c05e992 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/StageCamera.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 367e80e3fa958344491a9a196a902b72 +timeCreated: 1460480287 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs b/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs new file mode 100644 index 0000000..760bf95 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class StageEngine : MonoBehaviour + { + public int ObjectsOnStage; + public int GraphicsOnStage; + + public static bool beingQuit; + + void Start() + { + useGUILayout = false; + } + + void LateUpdate() + { + Stage.inst.InternalUpdate(); + + ObjectsOnStage = Stats.ObjectCount; + GraphicsOnStage = Stats.GraphicsCount; + } + + void OnGUI() + { + Stage.inst.HandleGUIEvents(Event.current); + } + + void OnApplicationQuit() + { + if (Application.isEditor) + { + beingQuit = true; + UIPackage.RemoveAllPackages(); + Stage.inst.Dispose(); + } + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + beingQuit = false; + } +#endif + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs.meta new file mode 100644 index 0000000..db1d022 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/StageEngine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0922848d650639f479e29635982d4a4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 100 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs new file mode 100644 index 0000000..16a15b4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs @@ -0,0 +1,29 @@ + +namespace FairyGUI +{ + /// + /// + /// + public class Stats + { + /// + /// + /// + public static int ObjectCount; + + /// + /// + /// + public static int GraphicsCount; + + /// + /// + /// + public static int LatestObjectCreation; + + /// + /// + /// + public static int LatestGraphicsCreation; + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs.meta new file mode 100644 index 0000000..480d069 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Stats.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: baddfd53a8a771f4eaa567ee3eb2ccc0 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text.meta new file mode 100644 index 0000000..bc0f9b0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b6a329985f59cbd4ba1618ac71c89d7d +folderAsset: yes +timeCreated: 1460480287 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs new file mode 100644 index 0000000..1e633c5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// Base class for all kind of fonts. + /// + public class BaseFont + { + /// + /// The name of this font object. + /// + public string name; + + /// + /// The texture of this font object. + /// + public NTexture mainTexture; + + /// + /// Can this font be tinted? Will be true for dynamic font and fonts generated by BMFont. + /// + public bool canTint; + + /// + /// If true, it will use extra vertices to enhance bold effect + /// + public bool customBold; + + /// + /// If true, it will use extra vertices to enhance bold effect ONLY when it is in italic style. + /// + public bool customBoldAndItalic; + + /// + /// If true, it will use extra vertices(4 direction) to enhance outline effect + /// + public bool customOutline; + + /// + /// The shader for this font object. + /// + public string shader; + + /// + /// Keep text crisp. + /// + public bool keepCrisp; + + /// + /// + /// + public int version; + + protected internal static bool textRebuildFlag; + + protected const float SupScale = 0.58f; + protected const float SupOffset = 0.33f; + + virtual public void SetFormat(TextFormat format, float fontSizeScale) + { + } + + virtual public void PrepareCharacters(string text, TextFormat format, float fontSizeScale) + { + } + + virtual public void Prepare(TextFormat format) + { + } + + virtual public bool BuildGraphics(NGraphics graphics) + { + return false; + } + + virtual public void StartDraw(NGraphics graphics) + { + } + + virtual public bool GetGlyph(char ch, out float width, out float height, out float baseline) + { + width = 0; + height = 0; + baseline = 0; + return false; + } + + virtual public void DrawGlyph(VertexBuffer vb, float x, float y2) + { + } + + virtual public void DrawLine(VertexBuffer vb, float x, float y, float width, int fontSize, int type) + { + } + + virtual public bool HasCharacter(char ch) + { + return false; + } + + virtual public int GetLineHeight(int size) + { + return 0; + } + + virtual public void Dispose() + { + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs.meta new file mode 100644 index 0000000..7a7dea3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BaseFont.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 242acb07eafac7a43a60dc4107fbd6b4 +timeCreated: 1460480287 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs new file mode 100644 index 0000000..bcca2b2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs @@ -0,0 +1,174 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class BitmapFont : BaseFont + { + /// + /// + /// + public class BMGlyph + { + public float x; + public float y; + public float width; + public float height; + public int advance; + public int lineHeight; + public Vector2[] uv = new Vector2[4]; + public int channel;//0-n/a, 1-r,2-g,3-b,4-alpha + } + + /// + /// + /// + public int size; + + /// + /// + /// + public bool resizable; + + /// + /// Font generated by BMFont use channels. + /// + public bool hasChannel; + + protected Dictionary _dict; + protected BMGlyph _glyph; + float _scale; + + public BitmapFont() + { + this.canTint = true; + this.hasChannel = false; + this.customOutline = true; + this.shader = ShaderConfig.bmFontShader; + + _dict = new Dictionary(); + _scale = 1; + } + + public void AddChar(char ch, BMGlyph glyph) + { + _dict[ch] = glyph; + } + + override public void SetFormat(TextFormat format, float fontSizeScale) + { + if (resizable) + _scale = (float)format.size / size * fontSizeScale; + else + _scale = fontSizeScale; + + if (canTint) + format.FillVertexColors(vertexColors); + } + + override public bool GetGlyph(char ch, out float width, out float height, out float baseline) + { + if (ch == ' ') + { + width = Mathf.RoundToInt(size * _scale / 2); + height = Mathf.RoundToInt(size * _scale); + baseline = height; + _glyph = null; + return true; + } + else if (_dict.TryGetValue((int)ch, out _glyph)) + { + width = Mathf.RoundToInt(_glyph.advance * _scale); + height = Mathf.RoundToInt(_glyph.lineHeight * _scale); + baseline = height; + return true; + } + else + { + width = 0; + height = 0; + baseline = 0; + return false; + } + } + + static Vector3 bottomLeft; + static Vector3 topLeft; + static Vector3 topRight; + static Vector3 bottomRight; + + static Color32[] vertexColors = new Color32[4]; + + override public void DrawGlyph(VertexBuffer vb, float x, float y) + { + if (_glyph == null) //space + return; + + topLeft.x = x + _glyph.x * _scale; + topLeft.y = y + (_glyph.lineHeight - _glyph.y) * _scale; + bottomRight.x = x + (_glyph.x + _glyph.width) * _scale; + bottomRight.y = topLeft.y - _glyph.height * _scale; + + topRight.x = bottomRight.x; + topRight.y = topLeft.y; + bottomLeft.x = topLeft.x; + bottomLeft.y = bottomRight.y; + + vb.vertices.Add(bottomLeft); + vb.vertices.Add(topLeft); + vb.vertices.Add(topRight); + vb.vertices.Add(bottomRight); + + vb.uvs.AddRange(_glyph.uv); + + if (hasChannel) + { + Vector2 channel = new Vector2(_glyph.channel, 0); + vb.uvs2.Add(channel); + vb.uvs2.Add(channel); + vb.uvs2.Add(channel); + vb.uvs2.Add(channel); + } + + if (canTint) + { + vb.colors.Add(vertexColors[0]); + vb.colors.Add(vertexColors[1]); + vb.colors.Add(vertexColors[2]); + vb.colors.Add(vertexColors[3]); + } + else + { + vb.colors.Add(Color.white); + vb.colors.Add(Color.white); + vb.colors.Add(Color.white); + vb.colors.Add(Color.white); + } + } + + override public bool HasCharacter(char ch) + { + return ch == ' ' || _dict.ContainsKey((int)ch); + } + + override public int GetLineHeight(int size) + { + if (_dict.Count > 0) + { + using (var et = _dict.GetEnumerator()) + { + et.MoveNext(); + if (resizable) + return Mathf.RoundToInt((float)et.Current.Value.lineHeight * size / this.size); + else + return et.Current.Value.lineHeight; + } + } + else + return 0; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs.meta new file mode 100644 index 0000000..7ce9d70 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/BitmapFont.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b1441c09e3389a046827b23ee409a37a +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs new file mode 100644 index 0000000..06fbf56 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs @@ -0,0 +1,377 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class DynamicFont : BaseFont + { + Font _font; + int _size; + float _ascent; + float _lineHeight; + float _scale; + TextFormat _format; + FontStyle _style; + bool _boldVertice; + CharacterInfo _char; + CharacterInfo _lineChar; + bool _gotLineChar; + + public DynamicFont() + { + this.canTint = true; + this.keepCrisp = true; + this.customOutline = true; + this.shader = ShaderConfig.textShader; + } + + /// + /// + /// + /// + /// + /// + public DynamicFont(string name, Font font) : this() + { + this.name = name; + this.nativeFont = font; + } + + override public void Dispose() + { + Font.textureRebuilt -= textureRebuildCallback; + } + + public Font nativeFont + { + get { return _font; } + set + { + if (_font != null) + Font.textureRebuilt -= textureRebuildCallback; + + _font = value; + Font.textureRebuilt += textureRebuildCallback; + _font.hideFlags = DisplayObject.hideFlags; + _font.material.hideFlags = DisplayObject.hideFlags; + _font.material.mainTexture.hideFlags = DisplayObject.hideFlags; + + if (mainTexture != null) + mainTexture.Dispose(); + mainTexture = new NTexture(_font.material.mainTexture); + mainTexture.destroyMethod = DestroyMethod.None; + + // _ascent = _font.ascent; + // _lineHeight = _font.lineHeight; + _ascent = _font.fontSize; + _lineHeight = _font.fontSize * 1.25f; + } + } + + override public void SetFormat(TextFormat format, float fontSizeScale) + { + _format = format; + float size = format.size * fontSizeScale; + if (keepCrisp) + size *= UIContentScaler.scaleFactor; + if (_format.specialStyle == TextFormat.SpecialStyle.Subscript || _format.specialStyle == TextFormat.SpecialStyle.Superscript) + size *= SupScale; + _size = Mathf.FloorToInt(size); + if (_size == 0) + _size = 1; + _scale = (float)_size / _font.fontSize; + + if (format.bold && !customBold) + { + if (format.italic) + { + if (customBoldAndItalic) + _style = FontStyle.Italic; + else + _style = FontStyle.BoldAndItalic; + } + else + _style = FontStyle.Bold; + } + else + { + if (format.italic) + _style = FontStyle.Italic; + else + _style = FontStyle.Normal; + } + + _boldVertice = format.bold && (customBold || (format.italic && customBoldAndItalic)); + format.FillVertexColors(vertexColors); + } + + override public void PrepareCharacters(string text, TextFormat format, float fontSizeScale) + { + SetFormat(format, fontSizeScale); + + _font.RequestCharactersInTexture(text, _size, _style); + } + + override public bool GetGlyph(char ch, out float width, out float height, out float baseline) + { + if (!_font.GetCharacterInfo(ch, out _char, _size, _style)) + { + if (ch == ' ') + { + //space may not be prepared, try again + _font.RequestCharactersInTexture(" ", _size, _style); + _font.GetCharacterInfo(ch, out _char, _size, _style); + } + else + { + width = height = baseline = 0; + return false; + } + } + + width = _char.advance; + height = _lineHeight * _scale; + baseline = _ascent * _scale; + if (_boldVertice) + width++; + + if (_format.specialStyle == TextFormat.SpecialStyle.Subscript) + { + height /= SupScale; + baseline /= SupScale; + } + else if (_format.specialStyle == TextFormat.SpecialStyle.Superscript) + { + height = height / SupScale + baseline * SupOffset; + baseline *= (SupOffset + 1 / SupScale); + } + + height = Mathf.RoundToInt(height); + baseline = Mathf.RoundToInt(baseline); + + if (keepCrisp) + { + width /= UIContentScaler.scaleFactor; + height /= UIContentScaler.scaleFactor; + baseline /= UIContentScaler.scaleFactor; + } + + return true; + } + + static Vector3 bottomLeft; + static Vector3 topLeft; + static Vector3 topRight; + static Vector3 bottomRight; + + static Vector2 uvBottomLeft; + static Vector2 uvTopLeft; + static Vector2 uvTopRight; + static Vector2 uvBottomRight; + + static Color32[] vertexColors = new Color32[4]; + + static Vector3[] BOLD_OFFSET = new Vector3[] + { + new Vector3(-0.5f, 0f, 0f), + new Vector3(0.5f, 0f, 0f), + new Vector3(0f, -0.5f, 0f), + new Vector3(0f, 0.5f, 0f) + }; + + override public void DrawGlyph(VertexBuffer vb, float x, float y) + { + topLeft.x = _char.minX; + topLeft.y = _char.maxY; + bottomRight.x = _char.maxX; + if (_char.glyphWidth == 0) //zero width, space etc + bottomRight.x = topLeft.x + _size / 2; + bottomRight.y = _char.minY; + + if (keepCrisp) + { + topLeft /= UIContentScaler.scaleFactor; + bottomRight /= UIContentScaler.scaleFactor; + } + + if (_format.specialStyle == TextFormat.SpecialStyle.Subscript) + y = y - Mathf.RoundToInt(_ascent * _scale * SupOffset); + else if (_format.specialStyle == TextFormat.SpecialStyle.Superscript) + y = y + Mathf.RoundToInt(_ascent * _scale * (1 / SupScale - 1 + SupOffset)); + + topLeft.x += x; + topLeft.y += y; + bottomRight.x += x; + bottomRight.y += y; + + topRight.x = bottomRight.x; + topRight.y = topLeft.y; + bottomLeft.x = topLeft.x; + bottomLeft.y = bottomRight.y; + + vb.vertices.Add(bottomLeft); + vb.vertices.Add(topLeft); + vb.vertices.Add(topRight); + vb.vertices.Add(bottomRight); + + uvBottomLeft = _char.uvBottomLeft; + uvTopLeft = _char.uvTopLeft; + uvTopRight = _char.uvTopRight; + uvBottomRight = _char.uvBottomRight; + + vb.uvs.Add(uvBottomLeft); + vb.uvs.Add(uvTopLeft); + vb.uvs.Add(uvTopRight); + vb.uvs.Add(uvBottomRight); + + vb.colors.Add(vertexColors[0]); + vb.colors.Add(vertexColors[1]); + vb.colors.Add(vertexColors[2]); + vb.colors.Add(vertexColors[3]); + + if (_boldVertice) + { + for (int b = 0; b < 4; b++) + { + Vector3 boldOffset = BOLD_OFFSET[b]; + + vb.vertices.Add(bottomLeft + boldOffset); + vb.vertices.Add(topLeft + boldOffset); + vb.vertices.Add(topRight + boldOffset); + vb.vertices.Add(bottomRight + boldOffset); + + vb.uvs.Add(uvBottomLeft); + vb.uvs.Add(uvTopLeft); + vb.uvs.Add(uvTopRight); + vb.uvs.Add(uvBottomRight); + + vb.colors.Add(vertexColors[0]); + vb.colors.Add(vertexColors[1]); + vb.colors.Add(vertexColors[2]); + vb.colors.Add(vertexColors[3]); + } + } + } + + override public void DrawLine(VertexBuffer vb, float x, float y, float width, int fontSize, int type) + { + if (!_gotLineChar) + { + _gotLineChar = true; + _font.RequestCharactersInTexture("_", 50, FontStyle.Normal); + _font.GetCharacterInfo('_', out _lineChar, 50, FontStyle.Normal); + } + + float thickness; + float offset; + + thickness = Mathf.Max(1, fontSize / 16f); //guest underline size + if (type == 0) + offset = Mathf.RoundToInt(_lineChar.minY * (float)fontSize / 50 + thickness); + else + offset = Mathf.RoundToInt(_ascent * 0.4f * fontSize / _font.fontSize); + if (thickness < 1) + thickness = 1; + + topLeft.x = x; + topLeft.y = y + offset; + bottomRight.x = x + width; + bottomRight.y = topLeft.y - thickness; + + topRight.x = bottomRight.x; + topRight.y = topLeft.y; + bottomLeft.x = topLeft.x; + bottomLeft.y = bottomRight.y; + + vb.vertices.Add(bottomLeft); + vb.vertices.Add(topLeft); + vb.vertices.Add(topRight); + vb.vertices.Add(bottomRight); + + uvBottomLeft = _lineChar.uvBottomLeft; + uvTopLeft = _lineChar.uvTopLeft; + uvTopRight = _lineChar.uvTopRight; + uvBottomRight = _lineChar.uvBottomRight; + + //取中点的UV + Vector2 u0; + if (_lineChar.uvBottomLeft.x != _lineChar.uvBottomRight.x) + u0.x = (_lineChar.uvBottomLeft.x + _lineChar.uvBottomRight.x) * 0.5f; + else + u0.x = (_lineChar.uvBottomLeft.x + _lineChar.uvTopLeft.x) * 0.5f; + + if (_lineChar.uvBottomLeft.y != _lineChar.uvTopLeft.y) + u0.y = (_lineChar.uvBottomLeft.y + _lineChar.uvTopLeft.y) * 0.5f; + else + u0.y = (_lineChar.uvBottomLeft.y + _lineChar.uvBottomRight.y) * 0.5f; + + vb.uvs.Add(u0); + vb.uvs.Add(u0); + vb.uvs.Add(u0); + vb.uvs.Add(u0); + + vb.colors.Add(vertexColors[0]); + vb.colors.Add(vertexColors[1]); + vb.colors.Add(vertexColors[2]); + vb.colors.Add(vertexColors[3]); + + if (_boldVertice) + { + for (int b = 0; b < 4; b++) + { + Vector3 boldOffset = BOLD_OFFSET[b]; + + vb.vertices.Add(bottomLeft + boldOffset); + vb.vertices.Add(topLeft + boldOffset); + vb.vertices.Add(topRight + boldOffset); + vb.vertices.Add(bottomRight + boldOffset); + + vb.uvs.Add(u0); + vb.uvs.Add(u0); + vb.uvs.Add(u0); + vb.uvs.Add(u0); + + vb.colors.Add(vertexColors[0]); + vb.colors.Add(vertexColors[1]); + vb.colors.Add(vertexColors[2]); + vb.colors.Add(vertexColors[3]); + } + } + } + + override public bool HasCharacter(char ch) + { + return _font.HasCharacter(ch); + } + + override public int GetLineHeight(int size) + { + return Mathf.RoundToInt(_lineHeight * size / _font.fontSize); + } + + void textureRebuildCallback(Font targetFont) + { + if (_font != targetFont) + return; + + if (mainTexture == null || !Application.isPlaying) + { + mainTexture = new NTexture(_font.material.mainTexture); + mainTexture.destroyMethod = DestroyMethod.None; + } + else + mainTexture.Reload(_font.material.mainTexture, null); + + _gotLineChar = false; + + textRebuildFlag = true; + version++; + + //Debug.Log("Font texture rebuild: " + name + "," + mainTexture.width + "," + mainTexture.height); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs.meta new file mode 100644 index 0000000..14c1622 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/DynamicFont.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 37b73f8527098974cb0ccf518ff95351 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs new file mode 100644 index 0000000..e5341c0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; + +namespace FairyGUI +{ + /// + /// + /// + public class Emoji + { + /// + /// 代表图片资源url。 + /// + public string url; + + /// + /// 图片宽度。不设置(0)则表示使用原始宽度。 + /// + public int width; + + /// + /// 图片高度。不设置(0)则表示使用原始高度。 + /// + public int height; + + /// + /// + /// + /// + /// + /// + public Emoji(string url, int width, int height) + { + this.url = url; + this.width = width; + this.height = height; + } + + /// + /// + /// + /// + public Emoji(string url) + { + this.url = url; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs.meta new file mode 100644 index 0000000..a21992a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/Emoji.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3859ae9020061394cadacd1624e04ed9 +timeCreated: 1475139464 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs new file mode 100644 index 0000000..388fad4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs @@ -0,0 +1,163 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class FontManager + { + public static Dictionary sFontFactory = new Dictionary(); + + static bool _checkTextMeshPro; + + /// + /// + /// + /// + /// + static public void RegisterFont(BaseFont font, string alias = null) + { + sFontFactory[font.name] = font; + if (alias != null) + sFontFactory[alias] = font; + } + + /// + /// + /// + /// + static public void UnregisterFont(BaseFont font) + { + List toDelete = new List(); + foreach (KeyValuePair kv in sFontFactory) + { + if (kv.Value == font) + toDelete.Add(kv.Key); + } + + foreach (string key in toDelete) + sFontFactory.Remove(key); + } + + /// + /// + /// + /// + /// + static public BaseFont GetFont(string name) + { + BaseFont font; + if (name.StartsWith(UIPackage.URL_PREFIX)) + { + font = UIPackage.GetItemAssetByURL(name) as BaseFont; + if (font != null) + return font; + } + + if (sFontFactory.TryGetValue(name, out font)) + return font; + + object asset = Resources.Load(name); + if (asset == null) + asset = Resources.Load("Fonts/" + name); + + //Try to use new API in Uinty5 to load + if (asset == null) + { + if (name.IndexOf(",") != -1) + { + string[] arr = name.Split(','); + int cnt = arr.Length; + for (int i = 0; i < cnt; i++) + arr[i] = arr[i].Trim(); + asset = Font.CreateDynamicFontFromOSFont(arr, 16); + } + else + asset = Font.CreateDynamicFontFromOSFont(name, 16); + } + + if (asset == null) + return Fallback(name); + + if (asset is Font) + { + font = new DynamicFont(); + font.name = name; + sFontFactory.Add(name, font); + + ((DynamicFont)font).nativeFont = (Font)asset; + } +#if FAIRYGUI_TMPRO + else if (asset is TMPro.TMP_FontAsset) + { + font = new TMPFont(); + font.name = name; + sFontFactory.Add(name, font); + ((TMPFont)font).fontAsset = (TMPro.TMP_FontAsset)asset; + } +#endif + else + { + if (asset.GetType().Name.Contains("TMP_FontAsset")) + { + if (!_checkTextMeshPro) + { + _checkTextMeshPro = true; + Debug.LogWarning("To enable TextMeshPro support, add script define symbol: FAIRYGUI_TMPRO"); + } + } + + return Fallback(name); + } + + return font; + } + + static BaseFont Fallback(string name) + { + if (name != UIConfig.defaultFont) + { + BaseFont ff; + if (sFontFactory.TryGetValue(UIConfig.defaultFont, out ff)) + { + sFontFactory[name] = ff; + return ff; + } + } + + Font asset = (Font)Resources.GetBuiltinResource(typeof(Font), "Arial.ttf"); + if (asset == null) + throw new Exception("Failed to load font '" + name + "'"); + + BaseFont font = new DynamicFont(); + font.name = name; + ((DynamicFont)font).nativeFont = asset; + + sFontFactory.Add(name, font); + return font; + } + + /// + /// + /// + static public void Clear() + { + foreach (KeyValuePair kv in sFontFactory) + kv.Value.Dispose(); + + sFontFactory.Clear(); + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + Clear(); + _checkTextMeshPro = false; + } +#endif + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs.meta new file mode 100644 index 0000000..46dca53 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/FontManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5084c28e388b94a4fa4e2a80485296b3 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs new file mode 100644 index 0000000..15d3f85 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs @@ -0,0 +1,42 @@ +namespace FairyGUI +{ + /// + /// 用于文本输入的键盘接口 + /// + public interface IKeyboard + { + /// + /// 键盘已收回,输入已完成 + /// + bool done { get; } + + /// + /// 是否支持在光标处输入。如果为true,GetInput返回的是在当前光标处需要插入的文本,如果为false,GetInput返回的是整个文本。 + /// + bool supportsCaret { get; } + + /// + /// 用户输入的文本。 + /// + /// + string GetInput(); + + /// + /// 打开键盘 + /// + /// + /// + /// + /// + /// + /// + /// + /// + void Open(string text, bool autocorrection, bool multiline, bool secure, bool alert, string textPlaceholder, int keyboardType, bool hideInput); + + /// + /// 关闭键盘 + /// + void Close(); + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs.meta new file mode 100644 index 0000000..786cf2b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/IKeyboard.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4e3b9d951c903b049b8495c2d16f67fe +timeCreated: 1460480287 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs new file mode 100644 index 0000000..c1d9b11 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs @@ -0,0 +1,1732 @@ +using System; +using UnityEngine; +using System.Text; +using FairyGUI.Utils; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +#if FAIRYGUI_INPUT_SYSTEM +using UnityEngine.InputSystem; +using UnityEngine.InputSystem.LowLevel; +#endif + +namespace FairyGUI +{ + /// + /// 接收用户输入的文本控件。因为支持直接输入表情,所以从RichTextField派生。 + /// + public class InputTextField : RichTextField + { + /// + /// + /// + public int maxLength { get; set; } + + /// + /// 如果是true,则当文本获得焦点时,弹出键盘进行输入,如果是false则不会。 + /// 默认是使用Stage.keyboardInput的值。 + /// + public bool keyboardInput { get; set; } + + /// + /// + /// + public int keyboardType { get; set; } + + /// + /// + /// + public bool hideInput { get; set; } + + /// + /// + /// + public bool disableIME { get; set; } + + /// + /// + /// + public bool mouseWheelEnabled { get; set; } + + /// + /// + /// + public static Action onCopy; + + /// + /// + /// + public static Action onPaste; + + /// + /// + /// + public static PopupMenu contextMenu; + + string _text; + string _restrict; + Regex _restrictPattern; + bool _displayAsPassword; + string _promptText; + string _decodedPromptText; + int _border; + int _corner; + Color _borderColor; + Color _backgroundColor; + bool _editable; + + bool _editing; + int _caretPosition; + int _selectionStart; + int _composing; + char _highSurrogateChar; + string _textBeforeEdit; + bool _usingHtmlInput; + + EventListener _onChanged; + EventListener _onSubmit; + + Shape _caret; + SelectionShape _selectionShape; + float _nextBlink; + + const int GUTTER_X = 2; + const int GUTTER_Y = 2; + + public InputTextField() + { + gameObject.name = "InputTextField"; + + _text = string.Empty; + maxLength = 0; + _editable = true; + _composing = 0; + keyboardInput = Stage.keyboardInput; + _borderColor = Color.black; + _backgroundColor = Color.clear; + mouseWheelEnabled = true; + this.tabStop = true; + cursor = "text-ibeam"; + + /* 因为InputTextField定义了ClipRect,而ClipRect是四周缩进了2个像素的(GUTTER),默认的点击测试 + * 是使用ClipRect的,那会造成无法点击四周的空白区域。所以这里自定义了一个HitArea + */ + this.hitArea = new RectHitTest(); + this.touchChildren = false; + + onFocusIn.Add(__focusIn); + onFocusOut.AddCapture(__focusOut); + onKeyDown.Add(__keydown); + onTouchBegin.AddCapture(__touchBegin); + onTouchMove.AddCapture(__touchMove); + onMouseWheel.Add(__mouseWheel); + onClick.Add(__click); + onRightClick.Add(__rightClick); + } + + /// + /// + /// + public EventListener onChanged + { + get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } + } + + /// + /// + /// + public EventListener onSubmit + { + get { return _onSubmit ?? (_onSubmit = new EventListener(this, "onSubmit")); } + } + + /// + /// + /// + public override string text + { + get + { + return _text; + } + set + { + _text = value; + ClearSelection(); + UpdateText(); + } + } + + /// + /// + /// + public override TextFormat textFormat + { + get + { + return base.textFormat; + } + set + { + base.textFormat = value; + if (_editing) + { + _caret.height = textField.textFormat.size; + _caret.DrawRect(0, Color.clear, textField.textFormat.color); + } + } + } + + /// + /// + /// + public string restrict + { + get { return _restrict; } + set + { + _restrict = value; + if (string.IsNullOrEmpty(_restrict)) + _restrictPattern = null; + else + _restrictPattern = new Regex(value); + } + } + + /// + /// + /// + public int caretPosition + { + get + { + textField.Redraw(); + return _caretPosition; + } + set + { + SetSelection(value, 0); + } + } + + public int selectionBeginIndex + { + get { return _selectionStart < _caretPosition ? _selectionStart : _caretPosition; } + } + + public int selectionEndIndex + { + get { return _selectionStart < _caretPosition ? _caretPosition : _selectionStart; } + } + + /// + /// + /// + public string promptText + { + get + { + return _promptText; + } + set + { + _promptText = value; + if (!string.IsNullOrEmpty(_promptText)) + _decodedPromptText = UBBParser.inst.Parse(XMLUtils.EncodeString(_promptText)); + else + _decodedPromptText = null; + UpdateText(); + } + } + + /// + /// + /// + public bool displayAsPassword + { + get { return _displayAsPassword; } + set + { + if (_displayAsPassword != value) + { + _displayAsPassword = value; + UpdateText(); + } + } + } + + /// + /// + /// + public bool editable + { + get { return _editable; } + set + { + _editable = value; + if (_caret != null) + _caret.visible = _editable; + } + } + + /// + /// + /// + public int border + { + get { return _border; } + set + { + _border = value; + UpdateShape(); + } + } + + /// + /// + /// + public int corner + { + get { return _corner; } + set + { + _corner = value; + UpdateShape(); + } + } + + /// + /// + /// + public Color borderColor + { + get { return _borderColor; } + set + { + _borderColor = value; + UpdateShape(); + } + } + + /// + /// + /// + public Color backgroundColor + { + get { return _backgroundColor; } + set + { + _backgroundColor = value; + UpdateShape(); + } + } + + void UpdateShape() + { + if (_border > 0 || _backgroundColor.a > 0) + { + CreateGraphics(); + + graphics.enabled = true; + RoundedRectMesh mesh = graphics.GetMeshFactory(); + mesh.lineWidth = _border; + mesh.lineColor = _borderColor; + mesh.fillColor = _backgroundColor; + mesh.topLeftRadius = mesh.topRightRadius = mesh.bottomLeftRadius = mesh.bottomRightRadius = corner; + graphics.SetMeshDirty(); + } + else + { + if (graphics != null) + graphics.enabled = false; + } + } + + /// + /// + /// + /// + /// -1 means the rest count from start + public void SetSelection(int start, int length) + { + if (!_editing) + Stage.inst.focus = this; + + _selectionStart = start; + _caretPosition = length < 0 ? int.MaxValue : (start + length); + if (!textField.Redraw()) + { + int cnt = textField.charPositions.Count; + if (_caretPosition >= cnt) + _caretPosition = cnt - 1; + if (_selectionStart >= cnt) + _selectionStart = cnt - 1; + UpdateCaret(); + } + } + + /// + /// + /// + /// + public void ReplaceSelection(string value) + { + if (keyboardInput && Stage.keyboardInput && !Stage.keyboard.supportsCaret) + { + this.text = _text + value; + OnChanged(); + return; + } + + if (!_editing) + Stage.inst.focus = this; + + textField.Redraw(); + + int t0, t1; + if (_selectionStart != _caretPosition) + { + if (_selectionStart < _caretPosition) + { + t0 = _selectionStart; + t1 = _caretPosition; + _caretPosition = _selectionStart; + } + else + { + t0 = _caretPosition; + t1 = _selectionStart; + _selectionStart = _caretPosition; + } + } + else + { + if (string.IsNullOrEmpty(value)) + return; + + t0 = t1 = _caretPosition; + } + + StringBuilder buffer = new StringBuilder(); + GetPartialText(0, t0, buffer); + if (!string.IsNullOrEmpty(value)) + { + value = ValidateInput(value); + buffer.Append(value); + + _caretPosition += GetTextlength(value); + } + GetPartialText(t1 + _composing, -1, buffer); + + string newText = buffer.ToString(); + if (maxLength > 0) + { + string newText2 = TruncateText(newText, maxLength); + if (newText2.Length != newText.Length) + _caretPosition += (newText2.Length - newText.Length); + newText = newText2; + } + + this.text = newText; + OnChanged(); + } + + /// + /// + /// + /// + public void ReplaceText(string value) + { + if (value == _text) + return; + + if (value == null) + value = string.Empty; + + value = ValidateInput(value); + + if (maxLength > 0) + value = TruncateText(value, maxLength); + + _caretPosition = value.Length; + + this.text = value; + OnChanged(); + } + + void GetPartialText(int startIndex, int endIndex, StringBuilder buffer) + { + int elementCount = textField.htmlElements.Count; + int lastIndex = startIndex; + string tt; + if (_displayAsPassword) + tt = _text; + else + tt = textField.parsedText; + if (endIndex < 0) + endIndex = tt.Length; + for (int i = 0; i < elementCount; i++) + { + HtmlElement element = textField.htmlElements[i]; + if (element.htmlObject != null && element.text != null) + { + if (element.charIndex >= startIndex && element.charIndex < endIndex) + { + buffer.Append(tt.Substring(lastIndex, element.charIndex - lastIndex)); + buffer.Append(element.text); + lastIndex = element.charIndex + 1; + } + } + } + if (lastIndex < tt.Length) + buffer.Append(tt.Substring(lastIndex, endIndex - lastIndex)); + } + + int GetTextlength(string value) + { + int textLen = value.Length; + int ret = textLen; + for (int i = 0; i < textLen; i++) + { + if (char.IsHighSurrogate(value[i])) + ret--; + } + return ret; + } + + string TruncateText(string value, int length) + { + int textLen = value.Length; + int len = 0; + int i = 0; + while (i < textLen) + { + if (len == length) + return value.Substring(0, i); + + if (char.IsHighSurrogate(value[i])) + i++; + i++; + len++; + } + return value; + } + + string ValidateInput(string source) + { + if (_restrict != null) + { + StringBuilder sb = new StringBuilder(); + Match mc = _restrictPattern.Match(source); + int lastPos = 0; + string s; + while (mc != Match.Empty) + { + if (mc.Index != lastPos) + { + //保留tab和回车 + for (int i = lastPos; i < mc.Index; i++) + { + if (source[i] == '\n' || source[i] == '\t') + sb.Append(source[i]); + } + } + + s = mc.ToString(); + lastPos = mc.Index + s.Length; + sb.Append(s); + + mc = mc.NextMatch(); + } + for (int i = lastPos; i < source.Length; i++) + { + if (source[i] == '\n' || source[i] == '\t') + sb.Append(source[i]); + } + + return sb.ToString(); + } + else + return source; + } + + void UpdateText() + { + if (!_editing && _text.Length == 0 && !string.IsNullOrEmpty(_decodedPromptText)) + { + textField.htmlText = _decodedPromptText; + return; + } + + if (_displayAsPassword) + textField.text = EncodePasswordText(_text); + else + textField.text = _text; + + _composing = compositionString.Length; + if (_composing > 0) + { + StringBuilder buffer = new StringBuilder(); + GetPartialText(0, _caretPosition, buffer); + buffer.Append(compositionString); + GetPartialText(_caretPosition, -1, buffer); + + textField.text = buffer.ToString(); + } + } + + string EncodePasswordText(string value) + { + int textLen = value.Length; + StringBuilder tmp = new StringBuilder(textLen); + int i = 0; + while (i < textLen) + { + char c = value[i]; + if (c == '\n') + tmp.Append(c); + else + { + if (char.IsHighSurrogate(c)) + i++; + tmp.Append("*"); + } + i++; + } + return tmp.ToString(); + } + + void ClearSelection() + { + if (_selectionStart != _caretPosition) + { + if (_selectionShape != null) + _selectionShape.Clear(); + _selectionStart = _caretPosition; + } + } + + public string GetSelection() + { + if (_selectionStart == _caretPosition) + return string.Empty; + + StringBuilder buffer = new StringBuilder(); + if (_selectionStart < _caretPosition) + GetPartialText(_selectionStart, _caretPosition, buffer); + else + GetPartialText(_caretPosition, _selectionStart, buffer); + return buffer.ToString(); + } + + void Scroll(int hScroll, int vScroll) + { + vScroll = Mathf.Clamp(vScroll, 0, textField.lines.Count - 1); + TextField.LineInfo line = textField.lines[vScroll]; + hScroll = Mathf.Clamp(hScroll, 0, line.charCount - 1); + + TextField.CharPosition cp = GetCharPosition(line.charIndex + hScroll); + Vector2 pt = GetCharLocation(cp); + MoveContent(new Vector2(GUTTER_X - pt.x, GUTTER_Y - pt.y), false); + } + + void AdjustCaret(TextField.CharPosition cp, bool moveSelectionHeader = false) + { + _caretPosition = cp.charIndex; + if (moveSelectionHeader) + _selectionStart = _caretPosition; + + UpdateCaret(); + } + + void UpdateCaret(bool forceUpdate = false) + { + TextField.CharPosition cp; + if (_editing) + cp = GetCharPosition(_caretPosition + compositionString.Length); + else + cp = GetCharPosition(_caretPosition); + + Vector2 pos = GetCharLocation(cp); + TextField.LineInfo line = textField.lines[cp.lineIndex]; + Vector2 offset = pos + textField.xy; + + if (offset.x < textField.textFormat.size) + offset.x += Mathf.Min(50, _contentRect.width * 0.5f); + else if (offset.x > _contentRect.width - GUTTER_X - textField.textFormat.size) + offset.x -= Mathf.Min(50, _contentRect.width * 0.5f); + + if (offset.x < GUTTER_X) + offset.x = GUTTER_X; + else if (offset.x > _contentRect.width - GUTTER_X) + offset.x = Mathf.Max(GUTTER_X, _contentRect.width - GUTTER_X); + + if (offset.y < GUTTER_Y) + offset.y = GUTTER_Y; + else if (offset.y + line.height >= _contentRect.height - GUTTER_Y) + offset.y = Mathf.Max(GUTTER_Y, _contentRect.height - line.height - GUTTER_Y); + + MoveContent(offset - pos, forceUpdate); + + if (_editing) + { + _caret.position = textField.xy + pos; + _caret.height = line.height > 0 ? line.height : textField.textFormat.size; + + if (_editable) + { + Vector2 cursorPos = _caret.LocalToWorld(new Vector2(0, _caret.height)); + cursorPos = StageCamera.main.WorldToScreenPoint(cursorPos); + + if (Application.platform == RuntimePlatform.WindowsPlayer + || Application.platform == RuntimePlatform.WindowsEditor) + { + cursorPos.y = Screen.height - cursorPos.y + 20; +#if UNITY_EDITOR + cursorPos.y += 50; +#endif + } + +#if FAIRYGUI_INPUT_SYSTEM + Keyboard keyboard = Keyboard.current; + if (keyboard != null) + keyboard.SetIMECursorPosition(cursorPos); +#endif + Input.compositionCursorPos = cursorPos; + + } + + _nextBlink = Time.time + 0.5f; + _caret.graphics.enabled = true; + + UpdateSelection(cp); + } + } + + void MoveContent(Vector2 pos, bool forceUpdate) + { + float ox = textField.x; + float oy = textField.y; + float nx = pos.x; + float ny = pos.y; + float rectWidth = _contentRect.width - 1; //-1 to avoid cursor be clipped + if (rectWidth - nx > textField.textWidth) + nx = rectWidth - textField.textWidth; + if (_contentRect.height - ny > textField.textHeight) + ny = _contentRect.height - textField.textHeight; + if (nx > 0) + nx = 0; + if (ny > 0) + ny = 0; + nx = (int)nx; + ny = (int)ny; + + if (nx != ox || ny != oy || forceUpdate) + { + if (_caret != null) + { + _caret.SetXY(nx + _caret.x - ox, ny + _caret.y - oy); + _selectionShape.SetXY(nx, ny); + } + textField.SetXY(nx, ny); + + List elements = textField.htmlElements; + int count = elements.Count; + for (int i = 0; i < count; i++) + { + HtmlElement element = elements[i]; + if (element.htmlObject != null) + element.htmlObject.SetPosition(element.position.x + nx, element.position.y + ny); + } + } + } + + void UpdateSelection(TextField.CharPosition cp) + { + if (_selectionStart == _caretPosition) + { + _selectionShape.Clear(); + return; + } + + TextField.CharPosition start; + if (_editing && compositionString.Length > 0) + { + if (_selectionStart < _caretPosition) + { + cp = GetCharPosition(_caretPosition); + start = GetCharPosition(_selectionStart); + } + else + start = GetCharPosition(_selectionStart + compositionString.Length); + } + else + start = GetCharPosition(_selectionStart); + if (start.charIndex > cp.charIndex) + { + TextField.CharPosition tmp = start; + start = cp; + cp = tmp; + } + + Vector2 v1 = GetCharLocation(start); + Vector2 v2 = GetCharLocation(cp); + + _selectionShape.rects.Clear(); + textField.GetLinesShape(start.lineIndex, v1.x, cp.lineIndex, v2.x, false, _selectionShape.rects); + _selectionShape.Refresh(); + } + + TextField.CharPosition GetCharPosition(int caretIndex) + { + if (caretIndex < 0) + caretIndex = 0; + else if (caretIndex >= textField.charPositions.Count) + caretIndex = textField.charPositions.Count - 1; + + return textField.charPositions[caretIndex]; + } + + /// + /// 通过本地坐标获得字符索引位置 + /// + /// 本地坐标 + /// + TextField.CharPosition GetCharPosition(Vector2 location) + { + if (textField.charPositions.Count <= 1) + return textField.charPositions[0]; + + location.x -= textField.x; + location.y -= textField.y; + + List lines = textField.lines; + int len = lines.Count; + TextField.LineInfo line; + int i; + for (i = 0; i < len; i++) + { + line = lines[i]; + if (line.y + line.height > location.y) + break; + } + if (i == len) + i = len - 1; + + int lineIndex = i; + + len = textField.charPositions.Count; + TextField.CharPosition v; + int firstInLine = -1; + for (i = 0; i < len; i++) + { + v = textField.charPositions[i]; + if (v.lineIndex == lineIndex) + { + if (firstInLine == -1) + firstInLine = i; + if (v.offsetX + v.width * 0.5f > location.x) + return v; + } + else if (firstInLine != -1) + { + if (textField.parsedText[i - 1] == '\n') + return textField.charPositions[i - 1]; + else + return v; + } + } + + return textField.charPositions[i - 1]; + } + + /// + /// 获得字符的坐标。 + /// + /// + /// + Vector2 GetCharLocation(TextField.CharPosition cp) + { + TextField.LineInfo line = textField.lines[cp.lineIndex]; + Vector2 pos; + if (line.charCount == 0 || textField.charPositions.Count == 0) + { + if (textField.align == AlignType.Center) + pos.x = (int)(_contentRect.width / 2); + else + pos.x = GUTTER_X; + } + else + { + TextField.CharPosition v = textField.charPositions[Math.Min(cp.charIndex, textField.charPositions.Count - 1)]; + pos.x = v.offsetX; + } + pos.y = line.y; + return pos; + } + + override internal void RefreshObjects() + { + base.RefreshObjects(); + + if (_editing) + { + SetChildIndex(_selectionShape, 0); + SetChildIndex(_caret, this.numChildren - 1); + } + + int cnt = textField.charPositions.Count; + if (_caretPosition >= cnt) + _caretPosition = cnt - 1; + if (_selectionStart >= cnt) + _selectionStart = cnt - 1; + + UpdateCaret(true); + } + + protected void OnChanged() + { + DispatchEvent("onChanged", null); + + TextInputHistory.inst.MarkChanged(this); + } + + protected override void OnSizeChanged() + { + base.OnSizeChanged(); + + Rect rect = _contentRect; + rect.x += GUTTER_X; + rect.y += GUTTER_Y; + rect.width -= GUTTER_X * 2; + rect.height -= GUTTER_Y * 2; + this.clipRect = rect; + ((RectHitTest)this.hitArea).rect = _contentRect; + } + + public override void Update(UpdateContext context) + { + base.Update(context); + + if (_editing) + { + if (_nextBlink < Time.time) + { + _nextBlink = Time.time + 0.5f; + _caret.graphics.enabled = !_caret.graphics.enabled; + } + } + } + + public override void Dispose() + { + if ((_flags & Flags.Disposed) != 0) + return; + + _editing = false; + if (_caret != null) + { + _caret.Dispose(); + _selectionShape.Dispose(); + } + + base.Dispose(); + } + + void DoCopy(string value) + { + if (onCopy != null) + { + onCopy(this, value); + return; + } + + + GUIUtility.systemCopyBuffer = value; + } + + void DoPaste() + { + if (onPaste != null) + { + onPaste(this); + return; + } + + string value = GUIUtility.systemCopyBuffer; + if (!string.IsNullOrEmpty(value)) + ReplaceSelection(value); + } + + void CreateCaret() + { + _caret = new Shape(); + _caret.gameObject.name = "Caret"; + _caret.touchable = false; + _caret._flags |= Flags.SkipBatching; + _caret.xy = textField.xy; + + _selectionShape = new SelectionShape(); + _selectionShape.gameObject.name = "Selection"; + _selectionShape.color = UIConfig.inputHighlightColor; + _selectionShape._flags |= Flags.SkipBatching; + _selectionShape.touchable = false; + _selectionShape.xy = textField.xy; + } + + void __touchBegin(EventContext context) + { + if (!_editing || textField.charPositions.Count <= 1 + || keyboardInput && Stage.keyboardInput && !Stage.keyboard.supportsCaret + || context.inputEvent.button != 0) + return; + + ClearSelection(); + + Vector3 v = Stage.inst.touchPosition; + v = this.GlobalToLocal(v); + TextField.CharPosition cp = GetCharPosition(v); + + AdjustCaret(cp, true); + + context.CaptureTouch(); + } + + void __touchMove(EventContext context) + { + if (!_editing) + return; + + Vector3 v = Stage.inst.touchPosition; + v = this.GlobalToLocal(v); + if (float.IsNaN(v.x)) + return; + + TextField.CharPosition cp = GetCharPosition(v); + if (cp.charIndex != _caretPosition) + AdjustCaret(cp); + } + + void __mouseWheel(EventContext context) + { + if (_editing && mouseWheelEnabled) + { + context.StopPropagation(); + + TextField.CharPosition cp = GetCharPosition(new Vector2(GUTTER_X, GUTTER_Y)); + int vScroll = cp.lineIndex; + int hScroll = cp.charIndex - textField.lines[cp.lineIndex].charIndex; + if (context.inputEvent.mouseWheelDelta < 0) + vScroll--; + else + vScroll++; + Scroll(hScroll, vScroll); + } + } + + void __focusIn(EventContext context) + { + if (!Application.isPlaying) + return; + + _editing = true; + _textBeforeEdit = _text; + + if (_caret == null) + CreateCaret(); + + if (!string.IsNullOrEmpty(_promptText)) + UpdateText(); + + float caretSize; + //如果界面缩小过,光标很容易看不见,这里放大一下 + if (UIConfig.inputCaretSize == 1 && UIContentScaler.scaleFactor < 1) + caretSize = UIConfig.inputCaretSize / UIContentScaler.scaleFactor; + else + caretSize = UIConfig.inputCaretSize; + _caret.SetSize(caretSize, textField.textFormat.size); + _caret.DrawRect(0, Color.clear, textField.textFormat.color); + _caret.visible = _editable; + AddChild(_caret); + + _selectionShape.Clear(); + AddChildAt(_selectionShape, 0); + + if (!textField.Redraw()) + { + TextField.CharPosition cp = GetCharPosition(_caretPosition); + AdjustCaret(cp); + } + + if (Stage.keyboardInput) + { + if (keyboardInput) + { + if (_editable) + Stage.inst.OpenKeyboard(_text, false, _displayAsPassword ? false : !textField.singleLine, + _displayAsPassword, false, null, keyboardType, hideInput); + + SetSelection(0, -1); + } + } +#if UNITY_WEBGL && FAIRYGUI_WEBGL_TEXT_INPUT + else if (!disableIME && !Application.isEditor) + { + _usingHtmlInput = true; + textField.visible = false; + _caret.visible = false; + WebGLTextInput.Start(this); + } +#endif + else + { +#if FAIRYGUI_INPUT_SYSTEM + Keyboard keyboard = Keyboard.current; + if (keyboard != null) + keyboard.SetIMEEnabled(!disableIME && !_displayAsPassword); +#endif + //Even using input system, we should use to the old input interface to enable IME (why) + if (!disableIME && !_displayAsPassword) + Input.imeCompositionMode = IMECompositionMode.On; + else + Input.imeCompositionMode = IMECompositionMode.Off; + + _composing = 0; + + if ((string)context.data == "key") //select all if got focus by tab key + SetSelection(0, -1); + + TextInputHistory.inst.StartRecord(this); + } + } + + void __focusOut(EventContext contxt) + { + if (!_editing) + return; + + _editing = false; + if (_usingHtmlInput) + { + _usingHtmlInput = false; + textField.visible = true; + _caret.visible = true; +#if UNITY_WEBGL && FAIRYGUI_WEBGL_TEXT_INPUT + WebGLTextInput.Stop(); +#endif + } + else if (Stage.keyboardInput) + { + if (keyboardInput) + Stage.inst.CloseKeyboard(); + } + else + { +#if FAIRYGUI_INPUT_SYSTEM + Keyboard keyboard = Keyboard.current; + if (keyboard != null) + keyboard.SetIMEEnabled(true); +#endif + Input.imeCompositionMode = IMECompositionMode.Auto; + + TextInputHistory.inst.StopRecord(this); + } + + if (!string.IsNullOrEmpty(_promptText)) + UpdateText(); + + _caret.RemoveFromParent(); + _selectionShape.RemoveFromParent(); + + if (contextMenu != null && contextMenu.contentPane.onStage) + contextMenu.Hide(); + } + + void __keydown(EventContext context) + { + if (!_editing) + return; + + if (HandleKey(context.inputEvent)) + context.StopPropagation(); + } + + bool HandleKey(InputEvent evt) + { + bool keyCodeHandled = true; + switch (evt.keyCode) + { + case KeyCode.Backspace: + { + if (evt.command) + { + //for mac:CMD+Backspace=Delete + if (_selectionStart == _caretPosition && _caretPosition < textField.charPositions.Count - 1) + _selectionStart = _caretPosition + 1; + } + else + { + if (_selectionStart == _caretPosition && _caretPosition > 0) + _selectionStart = _caretPosition - 1; + } + if (_editable) + ReplaceSelection(null); + break; + } + + case KeyCode.Delete: + { + if (_selectionStart == _caretPosition && _caretPosition < textField.charPositions.Count - 1) + _selectionStart = _caretPosition + 1; + if (_editable) + ReplaceSelection(null); + break; + } + + case KeyCode.LeftArrow: + { + if (!evt.shift) + ClearSelection(); + if (_caretPosition > 0) + { + if (evt.command) //mac keyboard + { + TextField.CharPosition cp = GetCharPosition(_caretPosition); + TextField.LineInfo line = textField.lines[cp.lineIndex]; + cp = GetCharPosition(new Vector2(int.MinValue, line.y + textField.y)); + AdjustCaret(cp, !evt.shift); + } + else + { + TextField.CharPosition cp = GetCharPosition(_caretPosition - 1); + AdjustCaret(cp, !evt.shift); + } + } + break; + } + + case KeyCode.RightArrow: + { + if (!evt.shift) + ClearSelection(); + if (_caretPosition < textField.charPositions.Count - 1) + { + if (evt.command) + { + TextField.CharPosition cp = GetCharPosition(_caretPosition); + TextField.LineInfo line = textField.lines[cp.lineIndex]; + cp = GetCharPosition(new Vector2(int.MaxValue, line.y + textField.y)); + AdjustCaret(cp, !evt.shift); + } + else + { + TextField.CharPosition cp = GetCharPosition(_caretPosition + 1); + AdjustCaret(cp, !evt.shift); + } + } + break; + } + + case KeyCode.UpArrow: + { + if (!evt.shift) + ClearSelection(); + + TextField.CharPosition cp = GetCharPosition(_caretPosition); + if (cp.lineIndex > 0) + { + TextField.LineInfo line = textField.lines[cp.lineIndex - 1]; + cp = GetCharPosition(new Vector2(_caret.x, line.y + textField.y)); + AdjustCaret(cp, !evt.shift); + } + break; + } + + case KeyCode.DownArrow: + { + if (!evt.shift) + ClearSelection(); + + TextField.CharPosition cp = GetCharPosition(_caretPosition); + if (cp.lineIndex == textField.lines.Count - 1) + cp.charIndex = textField.charPositions.Count - 1; + else + { + TextField.LineInfo line = textField.lines[cp.lineIndex + 1]; + cp = GetCharPosition(new Vector2(_caret.x, line.y + textField.y)); + } + AdjustCaret(cp, !evt.shift); + break; + } + + case KeyCode.PageUp: + { + ClearSelection(); + break; + } + + case KeyCode.PageDown: + { + ClearSelection(); + break; + } + + case KeyCode.Home: + { + if (!evt.shift) + ClearSelection(); + + TextField.CharPosition cp = GetCharPosition(_caretPosition); + TextField.LineInfo line = textField.lines[cp.lineIndex]; + cp = GetCharPosition(new Vector2(int.MinValue, line.y + textField.y)); + AdjustCaret(cp, !evt.shift); + break; + } + + case KeyCode.End: + { + if (!evt.shift) + ClearSelection(); + + TextField.CharPosition cp = GetCharPosition(_caretPosition); + TextField.LineInfo line = textField.lines[cp.lineIndex]; + cp = GetCharPosition(new Vector2(int.MaxValue, line.y + textField.y)); + AdjustCaret(cp, !evt.shift); + + break; + } + + //Select All + case KeyCode.A: + { + if (evt.ctrlOrCmd) + { + _selectionStart = 0; + AdjustCaret(GetCharPosition(int.MaxValue)); + } + break; + } + + //Copy + case KeyCode.C: + { + if (evt.ctrlOrCmd && !_displayAsPassword) + { + string s = GetSelection(); + if (!string.IsNullOrEmpty(s)) + DoCopy(s); + } + break; + } + + //Paste + case KeyCode.V: + { + if (evt.ctrlOrCmd && _editable) + DoPaste(); + break; + } + + //Cut + case KeyCode.X: + { + if (evt.ctrlOrCmd && !_displayAsPassword) + { + string s = GetSelection(); + if (!string.IsNullOrEmpty(s)) + { + DoCopy(s); + if (_editable) + ReplaceSelection(null); + } + } + break; + } + + case KeyCode.Z: + { + if (evt.ctrlOrCmd && _editable) + { + if (evt.shift) + TextInputHistory.inst.Redo(this); + else + TextInputHistory.inst.Undo(this); + } + break; + } + + case KeyCode.Y: + { + if (evt.ctrlOrCmd && _editable) + TextInputHistory.inst.Redo(this); + break; + } + + case KeyCode.Return: + case KeyCode.KeypadEnter: + { + if (textField.singleLine) + { + Stage.inst.focus = parent; + DispatchEvent("onSubmit", null); + DispatchEvent("onKeyDown", null); //for backward compatibility + } + break; + } + + case KeyCode.Tab: + { + if (textField.singleLine) + { + Stage.inst.DoKeyNavigate(evt.shift); + keyCodeHandled = false; + } + break; + } + + case KeyCode.Escape: + { + this.text = _textBeforeEdit; + Stage.inst.focus = parent; + break; + } + + default: + keyCodeHandled = (int)evt.keyCode <= 272 && !evt.ctrlOrCmd; + break; + } + + char c = evt.character; + if (c != 0) + { +#if FAIRYGUI_INPUT_SYSTEM + if (!evt.ctrlOrCmd && (c == '\n' || c == '\r' || c == '\t' || c == 25 || c == 3)) + { + _keydownFrame = Time.frameCount; + _keydownChar = c; + HandleTextInput(c); + } +#else + if (!evt.ctrlOrCmd) + HandleTextInput(c); +#endif + return true; + } + else + return keyCodeHandled; + } + + void HandleTextInput(char c) + { + if (c == '\r' || c == 3) + c = '\n'; + + if (c == 25)/*shift+tab*/ + c = '\t'; + + if (c == 27/*escape*/ || textField.singleLine && (c == '\n' || c == '\t')) + return; + + if (_editable) + { + if (char.IsHighSurrogate(c)) + { + _highSurrogateChar = c; + return; + } + + if (char.IsLowSurrogate(c)) + ReplaceSelection(char.ConvertFromUtf32(((int)c & 0x03FF) + ((((int)_highSurrogateChar & 0x03FF) + 0x40) << 10))); + else + ReplaceSelection(c.ToString()); + } + } + + void CheckComposition() + { + if (!_editable || keyboardInput) + return; + + if (compositionString.Length == 0) + { + UpdateText(); + } + else + { + int composing = _composing; + _composing = compositionString.Length; + + StringBuilder buffer = new StringBuilder(); + GetPartialText(0, _caretPosition, buffer); + buffer.Append(compositionString); + GetPartialText(_caretPosition + composing, -1, buffer); + + textField.text = buffer.ToString(); + } + } + + void __click(EventContext context) + { + if (_editing && context.inputEvent.isDoubleClick) + { + context.StopPropagation(); + _selectionStart = 0; + AdjustCaret(GetCharPosition(int.MaxValue)); + } + } + + void __rightClick(EventContext context) + { + if (contextMenu != null) + { + context.StopPropagation(); + contextMenu.Show(); + } + } + +#if !FAIRYGUI_INPUT_SYSTEM + static bool _IMEActive; + + public static bool EatKeyEvent(Event evt) + { + if (compositionString.Length > 0) + { + _IMEActive = true; + + if (evt.rawType == EventType.KeyDown) + { + var focus = Stage.inst.focus; + if (focus is InputTextField) + ((InputTextField)focus).CheckComposition(); + } + + return true; + } + else + { + if (_IMEActive && evt.keyCode != KeyCode.None) + { + //需要吃掉最后一个按键,通常是选择候选词或者结束输入 + var focus = Stage.inst.focus; + if (focus is InputTextField) + ((InputTextField)focus).CheckComposition(); + return true; + } + _IMEActive = false; + + return false; + } + } + + + public static string compositionString + { + get + { + if (Stage.keyboardInput) + return String.Empty; + + return Input.compositionString; + } + } + +#else + static string _compositionString = string.Empty; + static int _keydownFrame; + static char _keydownChar; + + public static void RegisterEvent() + { + Keyboard keyboard = Keyboard.current; + if (keyboard != null) + { + keyboard.onIMECompositionChange -= OnIMECompositionChange; + keyboard.onIMECompositionChange += OnIMECompositionChange; + keyboard.onTextInput -= OnTextInput; + keyboard.onTextInput += OnTextInput; + } + } + + public static void UnregisterEvent() + { + Keyboard keyboard = Keyboard.current; + if (keyboard != null) + { + keyboard.onIMECompositionChange -= OnIMECompositionChange; + keyboard.onTextInput -= OnTextInput; + } + } + + public static bool EatKeyEvent(Event evt) + { + return compositionString.Length > 0; + } + + static void OnIMECompositionChange(IMECompositionString composition) + { + if (Stage.keyboardInput) + return; + + _compositionString = composition.ToString(); + var focus = Stage.inst.focus; + if (focus is InputTextField) + ((InputTextField)focus).CheckComposition(); + } + + static void OnTextInput(char c) + { + Keyboard keyboard = Keyboard.current; + if (keyboard.ctrlKey.isPressed || Keyboard.current.altKey.isPressed + || keyboard.leftCommandKey.isPressed || keyboard.rightCommandKey.isPressed + ) + return; + + if (_keydownFrame == Time.frameCount && _keydownChar == c) + return; + + if (c < 32 || c >= 127 && c <= 159 + || c >= 0xF700 && c <= 0xF7FF /*why home/end/arrow-keys have these codes?*/) + return; + + var focus = Stage.inst.focus; + if ((focus is InputTextField) && !((InputTextField)focus).keyboardInput) + ((InputTextField)focus).HandleTextInput(c); + } + + /// + /// The current IME composition string being typed by the user. + /// + public static string compositionString + { + get + { + if (Stage.keyboardInput) + return String.Empty; + + return _compositionString; + } + } + +#endif + } + + class TextInputHistory + { + static TextInputHistory _inst; + public static TextInputHistory inst + { + get + { + if (_inst == null) + _inst = new TextInputHistory(); + return _inst; + } + } + + List _undoBuffer; + List _redoBuffer; + string _currentText; + InputTextField _textField; + bool _lock; + int _changedFrame; + + public const int maxHistoryLength = 5; + + public TextInputHistory() + { + _undoBuffer = new List(); + _redoBuffer = new List(); + } + + public void StartRecord(InputTextField textField) + { + _undoBuffer.Clear(); + _redoBuffer.Clear(); + _textField = textField; + _lock = false; + _currentText = textField.text; + _changedFrame = 0; + } + + public void MarkChanged(InputTextField textField) + { + if (_textField != textField) + return; + + if (_lock) + return; + + string newText = _textField.text; + if (_currentText == newText) + return; + + if (_changedFrame != Time.frameCount) + { + _changedFrame = Time.frameCount; + _undoBuffer.Add(_currentText); + if (_undoBuffer.Count > maxHistoryLength) + _undoBuffer.RemoveAt(0); + } + else + { + int cnt = _undoBuffer.Count; + if (cnt > 0 && newText == _undoBuffer[cnt - 1]) + _undoBuffer.RemoveAt(cnt - 1); + } + _currentText = newText; + } + + public void StopRecord(InputTextField textField) + { + if (_textField != textField) + return; + + _undoBuffer.Clear(); + _redoBuffer.Clear(); + _textField = null; + _currentText = null; + } + + public void Undo(InputTextField textField) + { + if (_textField != textField) + return; + + if (_undoBuffer.Count == 0) + return; + + string text = _undoBuffer[_undoBuffer.Count - 1]; + _undoBuffer.RemoveAt(_undoBuffer.Count - 1); + _redoBuffer.Add(_currentText); + _lock = true; + int caretPos = _textField.caretPosition; + _textField.text = text; + int dlen = text.Length - _currentText.Length; + if (dlen < 0) + _textField.caretPosition = caretPos + dlen; + _currentText = text; + _lock = false; + } + + public void Redo(InputTextField textField) + { + if (_textField != textField) + return; + + if (_redoBuffer.Count == 0) + return; + + string text = _redoBuffer[_redoBuffer.Count - 1]; + _redoBuffer.RemoveAt(_redoBuffer.Count - 1); + _undoBuffer.Add(_currentText); + _lock = true; + int caretPos = _textField.caretPosition; + _textField.text = text; + int dlen = text.Length - _currentText.Length; + if (dlen > 0) + _textField.caretPosition = caretPos + dlen; + _currentText = text; + _lock = false; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs.meta new file mode 100644 index 0000000..47e5c6a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/InputTextField.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 87f693de944eb7d4ab4ccb9b65af352a +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs new file mode 100644 index 0000000..38198bc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs @@ -0,0 +1,701 @@ +/******************************************************************** + Copyright (c) 2018, Tadpole Studio + All rights reserved + + 文件名称: RTL.cs + 说 明: RTL字符转换 + + 版 本: 1.00 + 时 间: 2018/2/24 9:02:12 + 作 者: AQ QQ:355010366 + 概 述: 新建 + +*********************************************************************/ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FairyGUI +{ + public class RTLSupport + { + internal enum CharState + { + isolated, + final, + lead, + middle, + } + + // Bidirectional Character Types + public enum DirectionType + { + UNKNOW = 0, + LTR, + RTL, + NEUTRAL, + } + +#if RTL_TEXT_SUPPORT + public static DirectionType BaseDirection = DirectionType.RTL; // 主体语言是否是RTL的语言 +#else + public static DirectionType BaseDirection = DirectionType.UNKNOW; +#endif + private static bool isCharsInitialized = false; + private static Dictionary mapping = new Dictionary(); + + private static List listFinal = new List(); + private static List listRep = new List(); + private static StringBuilder sbRep = new StringBuilder(); + private static StringBuilder sbN = new StringBuilder(); + private static StringBuilder sbFinal = new StringBuilder(); + private static StringBuilder sbReverse = new StringBuilder(); + + public static bool IsArabicLetter(char ch) + { + if (ch >= 0x600 && ch <= 0x6ff) + { + if ((ch >= 0x660 && ch <= 0x66D) || (ch >= 0x6f0 && ch <= 0x6f9)) // 标准阿拉伯语数字和东阿拉伯语数字 [2019/3/1/ 17:45:18 by aq_1000] + { + return false; + } + return true; + } + else if (ch >= 0x750 && ch <= 0x77f) + return true; + else if (ch >= 0xfb50 && ch <= 0xfc3f) + return true; + else if (ch >= 0xfe70 && ch <= 0xfefc) + return true; + return false; + } + + public static string ConvertNumber(string strNumber) + { + sbRep.Length = 0; + foreach (char ch in strNumber) + { + int un = ch; + if (un == 0x66c || ch == ',') // 去掉逗号 + continue; + else if (un == 0x660 || un == 0x6f0) + sbRep.Append('0'); + else if (un == 0x661 || un == 0x6f1) + sbRep.Append('1'); + else if (un == 0x662 || un == 0x6f2) + sbRep.Append('2'); + else if (un == 0x663 || un == 0x6f3) + sbRep.Append('3'); + else if (un == 0x664 || un == 0x6f4) + sbRep.Append('4'); + else if (un == 0x665 || un == 0x6f5) + sbRep.Append('5'); + else if (un == 0x666 || un == 0x6f6) + sbRep.Append('6'); + else if (un == 0x667 || un == 0x6f7) + sbRep.Append('7'); + else if (un == 0x668 || un == 0x6f8) + sbRep.Append('8'); + else if (un == 0x669 || un == 0x6f9) + sbRep.Append('9'); + else + sbRep.Append(ch); + } + return sbRep.ToString(); + } + + public static bool ContainsArabicLetters(string text) + { + foreach (char character in text) + { + if (character >= 0x600 && character <= 0x6ff) + return true; + + if (character >= 0x750 && character <= 0x77f) + return true; + + if (character >= 0xfb50 && character <= 0xfc3f) + return true; + + if (character >= 0xfe70 && character <= 0xfefc) + return true; + } + return false; + } + + // 检测文本主方向 + public static DirectionType DetectTextDirection(string text) + { + bool isContainRTL = false; + bool isContainLTR = false; + foreach (char ch in text) + { + if (IsArabicLetter(ch)) + { + isContainRTL = true; + if (isContainLTR) + break; + } + else if (char.IsLetter(ch)) + { + isContainLTR = true; + if (isContainRTL) + break; + } + } + if (!isContainRTL) + return DirectionType.UNKNOW; // 这边unknow暂时代表文本一个RTL字符都没有,无需进行RTL转换 + else if (!isContainLTR) + return DirectionType.RTL; + return BaseDirection; + } + + private static bool CheckSeparator(char input) + { + if (!IsArabicLetter(input)) + { + return true; + } + else + { + return (input == '،') || (input == '?') || (input == '؟'); + } + + // if ((input != ' ') && (input != '\t') && (input != '!') && (input != '.') && + // (input != '،') && (input != '?') && (input != '؟') && + // !_IsBracket(input) && // 括号也算 [2018/8/1/ 15:12:20 by aq_1000] + // !_IsNeutrality(input)) + // { + // return false; + // } + // return true; + } + + private static bool CheckSpecific(char input) + { + int num = input; + if ((num != 0x622) && (num != 0x623) && (num != 0x627) && (num != 0x62f) && (num != 0x625) && + (num != 0x630) && (num != 0x631) && (num != 0x632) && (num != 0x698) && (num != 0x648) && + !_CheckSoundmark(input)) + { + return false; + } + return true; + } + + private static bool _CheckSoundmark(char ch) + { + int un = ch; + return (un >= 0x610 && un <= 0x61e) || (un >= 0x64b && un <= 0x65f); + } + + public static string DoMapping(string input) + { + if (!isCharsInitialized) + { + isCharsInitialized = true; + InitChars(); + } + + // 伊斯兰教真主安拉在阿拉伯文里写作الله + // 键盘输入时输入 ل (lam) + ل (lam) + ه (ha) 后会自动转换成带记号的符号。 [2018/3/13 20:03:45 --By aq_1000] + if (input == "الله") + { + input = "ﷲ"; + } + + sbFinal.Length = 0; + sbFinal.Append(input); + char perChar = '\0'; + for (int i = 0; i < sbFinal.Length; i++) + { + if (!mapping.ContainsKey(sbFinal[i])) + { + perChar = sbFinal[i]; + continue; + } + + if ((i + 1) == sbFinal.Length) + { + if (sbFinal.Length == 1) + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; + } + else if (CheckSeparator(perChar) || CheckSpecific(perChar)) + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; + } + else + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.final]; + } + } + else if (i == 0) + { + if (!CheckSeparator(sbFinal[i + 1])) + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.lead]; + } + else + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; + } + } + else if (CheckSeparator(sbFinal[i + 1])) + { + if (CheckSeparator(perChar) || CheckSpecific(perChar)) + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; + } + else + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.final]; + } + } + else if (CheckSeparator(perChar)) + { + if (CheckSeparator(sbFinal[i + 1])) + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; + } + else + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.lead]; + } + } + else if (CheckSpecific(sbFinal[i + 1])) + { + if (CheckSeparator(perChar) || CheckSpecific(perChar)) + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.lead]; + } + else + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.middle]; + } + } + else if (CheckSpecific(perChar)) + { + if (CheckSeparator(sbFinal[i + 1])) + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.isolated]; + } + else + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.lead]; + } + } + else + { + perChar = sbFinal[i]; + sbFinal[i] = mapping[sbFinal[i]][(int)CharState.middle]; + } + } + return sbFinal.ToString(); + } + + // 主体语言是LTR + public static string ConvertLineL(string source) + { + listFinal.Clear(); + listRep.Clear(); + sbRep.Length = 0; + sbN.Length = 0; + int iReplace = 0; + DirectionType ePre = DirectionType.LTR; + char nextChar = '\0'; + for (int j = 0; j < source.Length; j++) + { + if (j < source.Length - 1) + nextChar = source[j + 1]; + else + nextChar = '\0'; + char item = source[j]; + DirectionType eCType = _GetDirection(item, nextChar, ePre, DirectionType.LTR); + if (eCType == DirectionType.RTL) + { + if (sbRep.Length == 0) + { + listFinal.Add('\x00bf'); + iReplace++; + } + + if (sbN.Length > 0) + sbRep.Append(sbN.ToString()); + sbN.Length = 0; + sbRep.Append(item); + } + else if (eCType == DirectionType.LTR) + { + if (sbRep.Length > 0) + { + listRep.Add(sbRep.ToString()); + } + sbRep.Length = 0; + + if (sbN.Length > 0) + { + for (int n = 0; n < sbN.Length; ++n) + { + listFinal.Add(sbN[n]); + } + } + sbN.Length = 0; + + // item = _ProcessBracket(item); // 文本主方向为LTR的话,括号不需要翻转 [2018/12/20/ 17:03:23 by aq_1000] + listFinal.Add(item); + } + else + { + sbN.Append(item); + } + ePre = eCType; + } + if (sbRep.Length > 0) + { + listRep.Add(sbRep.ToString()); + } + + // 一行中都只有中立字符的情况,就直接返回中立字符 [2018/12/6/ 16:34:38 by aq_1000] + if (sbN.Length > 0) + { + for (int n = 0; n < sbN.Length; ++n) + { + listFinal.Add(sbN[n]); + } + } + + sbRep.Length = 0; + sbN.Length = 0; + sbFinal.Length = 0; + sbFinal.Append(listFinal.ToArray()); + for (int m = 0; m < iReplace; m++) + { + for (int n = 0; n < sbFinal.Length; n++) + { + if (sbFinal[n] == '\x00bf') + { + sbRep.Length = 0; + sbRep.Append(_Reverse(listRep[0])); + listRep.RemoveAt(0); + + // 字符串反向的时候造成末尾空格跑到词首 [2018/4/11 20:04:35 --By aq_1000] + sbN.Length = 0; + for (int num4 = 0; num4 < sbRep.Length; num4++) + { + if (!_IsNeutrality(sbRep[num4])) + break; + sbN.Append(sbRep[num4]); + } + if (sbN.Length > 0) // 词首空格重新放到词尾 + { + sbRep.Remove(0, sbN.Length); + for (int iSpace = sbN.Length - 1; iSpace >= 0; --iSpace) // 空格也要取反 + { + sbRep.Append(sbN[iSpace]); + } + } + + sbFinal.Replace(sbFinal[n].ToString(), sbRep.ToString(), n, 1); + break; + } + } + } + return sbFinal.ToString(); + } + + // 主体语言是RTL,整个文本就从右往左读,LTR语言就作为嵌入语段处理 + public static string ConvertLineR(string source) + { + listFinal.Clear(); + listRep.Clear(); + sbRep.Length = 0; + sbN.Length = 0; + int iReplace = 0; + DirectionType ePre = DirectionType.RTL; + char nextChar = '\0'; + for (int j = 0; j < source.Length; j++) + { + if (j < source.Length - 1) + nextChar = source[j + 1]; + else + nextChar = '\0'; + char item = source[j]; + DirectionType eCType = _GetDirection(item, nextChar, ePre, DirectionType.RTL); + if (eCType == DirectionType.LTR) + { + if (sbRep.Length == 0) + { + listFinal.Add('\x00bf'); + iReplace++; + } + + if (sbN.Length > 0) + sbRep.Append(sbN.ToString()); + sbN.Length = 0; + sbRep.Append(item); + } + else if (eCType == DirectionType.RTL) + { + if (sbRep.Length > 0) + { + listRep.Add(sbRep.ToString()); + } + sbRep.Length = 0; + + if (sbN.Length > 0) + { + for (int n = 0; n < sbN.Length; ++n) + { + listFinal.Add(sbN[n]); + } + } + sbN.Length = 0; + + item = _ProcessBracket(item); + listFinal.Add(item); + } + else + { + sbN.Append(item); + } + ePre = eCType; + } + if (sbRep.Length > 0) + { + listRep.Add(sbRep.ToString()); + } + + // 一行中都只有中立字符的情况,就直接返回中立字符 [2018/12/6/ 16:34:38 by aq_1000] + if (sbN.Length > 0) + { + for (int n = 0; n < sbN.Length; ++n) + { + listFinal.Add(sbN[n]); + } + } + + sbFinal.Length = 0; + sbFinal.Append(listFinal.ToArray()); + for (int m = 0; m < iReplace; m++) + { + for (int n = 0; n < sbFinal.Length; n++) + { + if (sbFinal[n] == '\x00bf') + { + sbRep.Length = 0; + sbRep.Append(_Reverse(listRep[0])); + listRep.RemoveAt(0); + + // 字符串反向的时候造成末尾空格跑到词首 [2018/4/11 20:04:35 --By aq_1000] + sbN.Length = 0; + for (int num4 = 0; num4 < sbRep.Length; num4++) + { + if (!_IsNeutrality(sbRep[num4])) + break; + sbN.Append(sbRep[num4]); + } + if (sbN.Length > 0) // 词首空格重新放到词尾 + { + sbRep.Remove(0, sbN.Length); + for (int iSpace = sbN.Length - 1; iSpace >= 0; --iSpace) // 空格也要取反 + { + sbRep.Append(sbN[iSpace]); + } + } + + sbFinal.Replace(sbFinal[n].ToString(), sbRep.ToString(), n, 1); + break; + } + } + } + return sbFinal.ToString(); + } + + + private static string _Reverse(string source) + { + sbReverse.Length = 0; + int len = source.Length; + int i = len - 1; + while (i >= 0) + { + char ch = source[i]; + if (ch == '\r' && i != len - 1 && source[i + 1] == '\n') + { + i--; + continue; + } + + if (char.IsLowSurrogate(ch)) //不要反向高低代理对 + { + sbReverse.Append(source[i - 1]); + sbReverse.Append(ch); + i--; + } + else + sbReverse.Append(ch); + i--; + } + + return sbReverse.ToString(); + } + + private static void InitChars() + { + // {isolated,final,lead,middle} [2018/11/27 16:04:18 --By aq_1000] + mapping.Add(0x621, new char[4] { (char)0xFE80, (char)0xFE8A, (char)0xFE8B, (char)0xFE8C }); // Hamza + mapping.Add(0x627, new char[4] { (char)0xFE8D, (char)0xFE8E, (char)0xFE8D, (char)0xFE8E }); // Alef + mapping.Add(0x623, new char[4] { (char)0xFE83, (char)0xFE84, (char)0xFE83, (char)0xFE84 }); // AlefHamza + mapping.Add(0x624, new char[4] { (char)0xFE85, (char)0xFE85, (char)0xFE85, (char)0xFE85 }); // WawHamza + mapping.Add(0x625, new char[4] { (char)0xFE87, (char)0xFE87, (char)0xFE87, (char)0xFE87 }); // AlefMaksoor + mapping.Add(0x649, new char[4] { (char)0xFBFC, (char)0xFBFD, (char)0xFBFE, (char)0xFBFF }); // AlefMagsora + mapping.Add(0x626, new char[4] { (char)0xFE89, (char)0xFE8A, (char)0xFE8B, (char)0xFE8C }); // HamzaNabera + mapping.Add(0x628, new char[4] { (char)0xFE8F, (char)0xFE90, (char)0xFE91, (char)0xFE92 }); // Ba + mapping.Add(0x62A, new char[4] { (char)0xFE95, (char)0xFE96, (char)0xFE97, (char)0xFE98 }); // Ta + mapping.Add(0x62B, new char[4] { (char)0xFE99, (char)0xFE9A, (char)0xFE9B, (char)0xFE9C }); // Tha2 + mapping.Add(0x62C, new char[4] { (char)0xFE9D, (char)0xFE9E, (char)0xFE9F, (char)0xFEA0 }); // Jeem + mapping.Add(0x62D, new char[4] { (char)0xFEA1, (char)0xFEA2, (char)0xFEA3, (char)0xFEA4 }); // H7aa + mapping.Add(0x62E, new char[4] { (char)0xFEA5, (char)0xFEA6, (char)0xFEA7, (char)0xFEA8 }); // Khaa2 + mapping.Add(0x62F, new char[4] { (char)0xFEA9, (char)0xFEAA, (char)0xFEA9, (char)0xFEAA }); // Dal + mapping.Add(0x630, new char[4] { (char)0xFEAB, (char)0xFEAC, (char)0xFEAB, (char)0xFEAC }); // Thal + mapping.Add(0x631, new char[4] { (char)0xFEAD, (char)0xFEAE, (char)0xFEAD, (char)0xFEAD }); // Ra2 + mapping.Add(0x632, new char[4] { (char)0xFEAF, (char)0xFEB0, (char)0xFEAF, (char)0xFEB0 }); // Zeen + mapping.Add(0x633, new char[4] { (char)0xFEB1, (char)0xFEB2, (char)0xFEB3, (char)0xFEB4 }); // Seen + mapping.Add(0x634, new char[4] { (char)0xFEB5, (char)0xFEB6, (char)0xFEB7, (char)0xFEB8 }); // Sheen + mapping.Add(0x635, new char[4] { (char)0xFEB9, (char)0xFEBA, (char)0xFEBB, (char)0xFEBC }); // S9a + mapping.Add(0x636, new char[4] { (char)0xFEBD, (char)0xFEBE, (char)0xFEBF, (char)0xFEC0 }); // Dha + mapping.Add(0x637, new char[4] { (char)0xFEC1, (char)0xFEC2, (char)0xFEC3, (char)0xFEC4 }); // T6a + mapping.Add(0x638, new char[4] { (char)0xFEC5, (char)0xFEC6, (char)0xFEC7, (char)0xFEC8 }); // T6ha + mapping.Add(0x639, new char[4] { (char)0xFEC9, (char)0xFECA, (char)0xFECB, (char)0xFECC }); // Ain + mapping.Add(0x63A, new char[4] { (char)0xFECD, (char)0xFECE, (char)0xFECF, (char)0xFED0 }); // Gain + mapping.Add(0x641, new char[4] { (char)0xFED1, (char)0xFED2, (char)0xFED3, (char)0xFED4 }); // Fa + mapping.Add(0x642, new char[4] { (char)0xFED5, (char)0xFED6, (char)0xFED7, (char)0xFED8 }); // Gaf + mapping.Add(0x643, new char[4] { (char)0xFED9, (char)0xFEDA, (char)0xFEDB, (char)0xFEDC }); // Kaf + mapping.Add(0x644, new char[4] { (char)0xFEDD, (char)0xFEDE, (char)0xFEDF, (char)0xFEE0 }); // Lam + mapping.Add(0x645, new char[4] { (char)0xFEE1, (char)0xFEE2, (char)0xFEE3, (char)0xFEE4 }); // Meem + mapping.Add(0x646, new char[4] { (char)0xFEE5, (char)0xFEE6, (char)0xFEE7, (char)0xFEE8 }); // Noon + mapping.Add(0x647, new char[4] { (char)0xFEE9, (char)0xFEEA, (char)0xFEEB, (char)0xFEEC }); // Ha + mapping.Add(0x648, new char[4] { (char)0xFEED, (char)0xFEEE, (char)0xFEED, (char)0xFEEE }); // Waw + mapping.Add(0x64A, new char[4] { (char)0xFEF1, (char)0xFEF2, (char)0xFEF3, (char)0xFEF4 }); // Ya + mapping.Add(0x622, new char[4] { (char)0xFE81, (char)0xFE81, (char)0xFE81, (char)0xFE81 }); // AlefMad + mapping.Add(0x629, new char[4] { (char)0xFE93, (char)0xFE94, (char)0xFE94, (char)0xFE94 }); // TaMarboota // 该字符只会出现在末尾 [2018/4/10 16:04:18 --By aq_1000] + mapping.Add(0x67E, new char[4] { (char)0xFB56, (char)0xFB57, (char)0xFB58, (char)0xFB59 }); // PersianPe + mapping.Add(0x686, new char[4] { (char)0xFB7A, (char)0xFB7B, (char)0xFB7C, (char)0xFB7D }); // PersianChe + mapping.Add(0x698, new char[4] { (char)0xFB8A, (char)0xFB8B, (char)0xFB8A, (char)0xFB8B }); // PersianZe + mapping.Add(0x6AF, new char[4] { (char)0xFB92, (char)0xFB93, (char)0xFB94, (char)0xFB95 }); // PersianGaf + mapping.Add(0x6A9, new char[4] { (char)0xFB8E, (char)0xFB8F, (char)0xFB90, (char)0xFB91 }); // PersianGaf2 + + mapping.Add(0x6BE, new char[4] { (char)0xFEE9, (char)0xFEEA, (char)0xFEEB, (char)0xFEEC }); + mapping.Add(0x6CC, new char[4] { (char)0xFBFC, (char)0xFBFD, (char)0xFBFE, (char)0xFBFF }); + } + + // 是否中立方向字符 + private static bool _IsNeutrality(char uc) + { + return (uc == ':' || uc == ':' || uc == ' ' || /*uc == '%' ||*/ /*uc == '+' ||*/ /*uc == '-' ||*/ uc == '\n' || uc == '\r' || uc == '\t' || uc == '@' || + (uc >= 0x2600 && uc <= 0x27BF)); // 表情符号 + } + + // 是否句末标点符号 + private static bool _IsEndPunctuation(char uc, char nextChar) + { + if (uc == '.') + return _IsNeutrality(nextChar); + return (uc == '!' || uc == '!' || uc == '。' || uc == '،' || uc == '?' || uc == '؟'); + } + + // 判断字符方向 + private static DirectionType _GetDirection(char uc, char nextChar, DirectionType ePre, DirectionType eBase) + { + DirectionType eCType = ePre; + int uni = uc; + + if (_IsBracket(uc) || _IsEndPunctuation(uc, nextChar)) + { + eCType = eBase; // 括号和句末标点符号,方向根据上个字符为准 [2018/12/26/ 15:56:24 by aq_1000] + } + else if ((uni >= 0x660) && (uni <= 0x66D)) + { + eCType = DirectionType.LTR; + } + else if (IsArabicLetter(uc) || uc == '+' /*|| uc == '-'*/ || uc == '%') + { + eCType = DirectionType.RTL; + } + else if (uc == '-') + { + if (char.IsNumber(nextChar)) + eCType = DirectionType.LTR; + else + eCType = DirectionType.RTL; + } + else if (_IsNeutrality(uc)) // 中立方向字符,方向就和上一个字符一样 [2018/3/24 16:03:27 --By aq_1000] + { + if (ePre == DirectionType.UNKNOW || ePre == DirectionType.NEUTRAL) + { + if (char.IsNumber(nextChar)) // 数字都是弱LTR方向符,开头中立字符后面紧跟着数字的话,中立字符方向算文本主方向 [IsDigit()只是0-9] [2018/12/20/ 16:32:32 by aq_1000] + { + eCType = BaseDirection; + } + else + eCType = DirectionType.NEUTRAL; + } + else + eCType = ePre; + } + else + eCType = DirectionType.LTR; + + return eCType; + } + + // 是否括号 + private static bool _IsBracket(char uc) + { + return (uc == ')' || uc == '(' || uc == ')' || uc == '(' || + uc == ']' || uc == '[' || uc == '】' || uc == '【' || + uc == '}' || uc == '{' || + // uc == '≥' || uc == '≤' || uc == '>' || uc == '<' || + uc == '》' || uc == '《' || uc == '“' || uc == '”' || uc == '"'); + } + + // 这些配对符,在从右至左排列中应该逆序显示 + private static char _ProcessBracket(char uc) + { + if (uc == '[') return ']'; + else if (uc == ']') return '['; + else if (uc == '【') return '】'; + else if (uc == '】') return '【'; + else if (uc == '{') return '}'; + else if (uc == '}') return '{'; + else if (uc == '(') return ')'; + else if (uc == ')') return '('; + else if (uc == '(') return ')'; + else if (uc == ')') return '('; + else if (uc == '<') return '>'; + else if (uc == '>') return '<'; + else if (uc == '《') return '》'; + else if (uc == '》') return '《'; + else if (uc == '≤') return '≥'; + else if (uc == '≥') return '≤'; + else if (uc == '”') return '“'; + else if (uc == '”') return '“'; + else return uc; + } + } +} + diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs.meta new file mode 100644 index 0000000..89eb235 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RTLSupport.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 575b3af943ee8a04bb4d8feb568b1d2e +timeCreated: 1521600498 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs new file mode 100644 index 0000000..1603ee6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs @@ -0,0 +1,216 @@ +using System.Collections.Generic; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public class RichTextField : Container + { + /// + /// + /// + public IHtmlPageContext htmlPageContext { get; set; } + + /// + /// + /// + public HtmlParseOptions htmlParseOptions { get; private set; } + + /// + /// + /// + public Dictionary emojies { get; set; } + + /// + /// + /// + public TextField textField { get; private set; } + + public RichTextField() + { + gameObject.name = "RichTextField"; + this.opaque = true; + + htmlPageContext = HtmlPageContext.inst; + htmlParseOptions = new HtmlParseOptions(); + + this.textField = new TextField(); + textField.EnableRichSupport(this); + AddChild(textField); + } + + /// + /// + /// + virtual public string text + { + get { return textField.text; } + set { textField.text = value; } + } + + /// + /// + /// + virtual public string htmlText + { + get { return textField.htmlText; } + set { textField.htmlText = value; } + } + + /// + /// + /// + virtual public TextFormat textFormat + { + get { return textField.textFormat; } + set { textField.textFormat = value; } + } + + /// + /// + /// + /// + /// + public HtmlElement GetHtmlElement(string name) + { + List elements = textField.htmlElements; + int count = elements.Count; + for (int i = 0; i < count; i++) + { + HtmlElement element = elements[i]; + if (name.Equals(element.name, System.StringComparison.OrdinalIgnoreCase)) + return element; + } + + return null; + } + + /// + /// + /// + /// + /// + public HtmlElement GetHtmlElementAt(int index) + { + return textField.htmlElements[index]; + } + + /// + /// + /// + public int htmlElementCount + { + get { return textField.htmlElements.Count; } + } + + /// + /// + /// + /// + /// + public void ShowHtmlObject(int index, bool show) + { + HtmlElement element = textField.htmlElements[index]; + if (element.htmlObject != null && element.type != HtmlElementType.Link) + { + //set hidden flag + if (show) + element.status &= 253; //~(1<<1) + else + element.status |= 2; + + if ((element.status & 3) == 0) //not (hidden and clipped) + { + if ((element.status & 4) == 0) //not added + { + element.status |= 4; + element.htmlObject.Add(); + } + } + else + { + if ((element.status & 4) != 0) //added + { + element.status &= 251; + element.htmlObject.Remove(); + } + } + } + } + + public override void EnsureSizeCorrect() + { + textField.EnsureSizeCorrect(); + } + + override protected void OnSizeChanged() + { + textField.size = _contentRect.size; //千万不可以调用this.size,后者会触发EnsureSizeCorrect + + base.OnSizeChanged(); + } + + public override void Update(UpdateContext context) + { + textField.Redraw(); + + base.Update(context); + } + + public override void Dispose() + { + if ((_flags & Flags.Disposed) != 0) + return; + + CleanupObjects(); + + base.Dispose(); + } + + internal void CleanupObjects() + { + List elements = textField.htmlElements; + int count = elements.Count; + for (int i = 0; i < count; i++) + { + HtmlElement element = elements[i]; + if (element.htmlObject != null) + { + element.htmlObject.Remove(); + htmlPageContext.FreeObject(element.htmlObject); + } + } + } + + virtual internal void RefreshObjects() + { + List elements = textField.htmlElements; + int count = elements.Count; + for (int i = 0; i < count; i++) + { + HtmlElement element = elements[i]; + if (element.htmlObject != null) + { + if ((element.status & 3) == 0) //not (hidden and clipped) + { + if ((element.status & 4) == 0) //not added + { + element.status |= 4; + element.htmlObject.Add(); + } + } + else + { + if ((element.status & 4) != 0) //added + { + element.status &= 251; + element.htmlObject.Remove(); + } + } + } + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs.meta new file mode 100644 index 0000000..120a9d0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/RichTextField.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 87b472f7ce488fa4bbd8942342458ccf +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs new file mode 100644 index 0000000..90b8548 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs @@ -0,0 +1,94 @@ +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public class SelectionShape : DisplayObject, IMeshFactory + { + public readonly List rects; + + public SelectionShape() + { + CreateGameObject("SelectionShape"); + graphics = new NGraphics(gameObject); + graphics.texture = NTexture.Empty; + graphics.meshFactory = this; + + rects = new List(); + } + + /// + /// + /// + public Color color + { + get + { + return graphics.color; + } + set + { + graphics.color = value; + graphics.Tint(); + } + } + + public void Refresh() + { + int count = rects.Count; + if (count > 0) + { + Rect rect = new Rect(); + rect = rects[0]; + Rect tmp; + for (int i = 1; i < count; i++) + { + tmp = rects[i]; + rect = ToolSet.Union(ref rect, ref tmp); + } + SetSize(rect.xMax, rect.yMax); + } + else + SetSize(0, 0); + graphics.SetMeshDirty(); + } + + public void Clear() + { + rects.Clear(); + graphics.SetMeshDirty(); + } + + public void OnPopulateMesh(VertexBuffer vb) + { + int count = rects.Count; + if (count == 0 || this.color == Color.clear) + return; + + for (int i = 0; i < count; i++) + vb.AddQuad(rects[i]); + vb.AddTriangles(); + } + + protected override DisplayObject HitTest() + { + Vector2 localPoint = WorldToLocal(HitTestContext.worldPoint, HitTestContext.direction); + + if (_contentRect.Contains(localPoint)) + { + int count = rects.Count; + for (int i = 0; i < count; i++) + { + if (rects[i].Contains(localPoint)) + return this; + } + } + + return null; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs.meta new file mode 100644 index 0000000..1d1fd48 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/SelectionShape.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7f1920b8ccf9c8b4ca5f2794991735d9 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs new file mode 100644 index 0000000..bbd7c2f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs @@ -0,0 +1,1652 @@ +using System; +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public class TextField : DisplayObject, IMeshFactory + { + VertAlignType _verticalAlign; + TextFormat _textFormat; + bool _input; + string _text; + AutoSizeType _autoSize; + bool _wordWrap; + bool _singleLine; + bool _html; + RTLSupport.DirectionType _textDirection; + int _maxWidth; + + List _elements; + List _lines; + List _charPositions; + + BaseFont _font; + float _textWidth; + float _textHeight; + bool _textChanged; + float _yOffset; + float _fontSizeScale; + float _renderScale; + int _fontVersion; + string _parsedText; + int _ellipsisCharIndex; + int _typingEffectPos; + + RichTextField _richTextField; + + const int GUTTER_X = 2; + const int GUTTER_Y = 2; + const float IMAGE_BASELINE = 0.8f; + const int ELLIPSIS_LENGTH = 2; + static List sLineChars = new List(); + + public TextField() + { + _flags |= Flags.TouchDisabled; + + _textFormat = new TextFormat(); + _fontSizeScale = 1; + _renderScale = UIContentScaler.scaleFactor; + + _wordWrap = false; + _text = string.Empty; + _parsedText = string.Empty; + _typingEffectPos = -1; + + _elements = new List(0); + _lines = new List(1); + + CreateGameObject("TextField"); + graphics = new NGraphics(gameObject); + graphics.meshFactory = this; + } + + internal void EnableRichSupport(RichTextField richTextField) + { + _richTextField = richTextField; + if (richTextField is InputTextField) + { + _input = true; + EnableCharPositionSupport(); + } + } + + public void EnableCharPositionSupport() + { + if (_charPositions == null) + { + _charPositions = new List(); + _textChanged = true; + } + } + + /// + /// + /// + public TextFormat textFormat + { + get { return _textFormat; } + set + { + _textFormat = value; + ApplyFormat(); + } + } + + /// + /// + /// + public void ApplyFormat() + { + string fontName = _textFormat.font; + if (string.IsNullOrEmpty(fontName)) + fontName = UIConfig.defaultFont; + BaseFont newFont = FontManager.GetFont(fontName); + if (_font != newFont) + { + _font = newFont; + _fontVersion = _font.version; + graphics.SetShaderAndTexture(_font.shader, _font.mainTexture); + } + + if (!string.IsNullOrEmpty(_text)) + _textChanged = true; + } + + /// + /// + /// + public AlignType align + { + get { return _textFormat.align; } + set + { + if (_textFormat.align != value) + { + _textFormat.align = value; + if (!string.IsNullOrEmpty(_text)) + _textChanged = true; + } + } + } + + /// + /// + /// + public VertAlignType verticalAlign + { + get + { + return _verticalAlign; + } + set + { + if (_verticalAlign != value) + { + _verticalAlign = value; + if (!_textChanged) + ApplyVertAlign(); + } + } + } + + /// + /// + /// + public string text + { + get { return _text; } + set + { + if (_text == value && !_html) + return; + + _text = value; + _textChanged = true; + _html = false; + } + } + + /// + /// + /// + public string htmlText + { + get { return _text; } + set + { + if (_text == value && _html) + return; + + _text = value; + _textChanged = true; + _html = true; + } + } + + public string parsedText + { + get { return _parsedText; } + } + + /// + /// + /// + public AutoSizeType autoSize + { + get { return _autoSize; } + set + { + if (_autoSize != value) + { + _autoSize = value; + _textChanged = true; + } + } + } + + /// + /// + /// + public bool wordWrap + { + get { return _wordWrap; } + set + { + if (_wordWrap != value) + { + _wordWrap = value; + _textChanged = true; + } + } + } + + /// + /// + /// + public bool singleLine + { + get { return _singleLine; } + set + { + if (_singleLine != value) + { + _singleLine = value; + _textChanged = true; + } + } + } + + /// + /// + /// + public float stroke + { + get + { + return _textFormat.outline; + } + set + { + if (_textFormat.outline != value) + { + _textFormat.outline = value; + _textChanged = true; + } + } + } + + /// + /// + /// + public Color strokeColor + { + get + { + return _textFormat.outlineColor; + } + set + { + if (_textFormat.outlineColor != value) + { + _textFormat.outlineColor = value; + _textChanged = true; + } + } + } + + /// + /// + /// + public Vector2 shadowOffset + { + get + { + return _textFormat.shadowOffset; + } + set + { + _textFormat.shadowOffset = value; + _textChanged = true; + } + } + + /// + /// + /// + public float textWidth + { + get + { + if (_textChanged) + BuildLines(); + + return _textWidth; + } + } + + /// + /// + /// + public float textHeight + { + get + { + if (_textChanged) + BuildLines(); + + return _textHeight; + } + } + + /// + /// + /// + public int maxWidth + { + get { return _maxWidth; } + set + { + if (_maxWidth != value) + { + _maxWidth = value; + _textChanged = true; + } + } + } + + /// + /// + /// + public List htmlElements + { + get + { + if (_textChanged) + BuildLines(); + + return _elements; + } + } + + /// + /// + /// + public List lines + { + get + { + if (_textChanged) + BuildLines(); + + return _lines; + } + } + + /// + /// + /// + public List charPositions + { + get + { + if (_textChanged) + BuildLines(); + + graphics.UpdateMesh(); + + return _charPositions; + } + } + + /// + /// + /// + public RichTextField richTextField + { + get { return _richTextField; } + } + + /// + /// + /// + public bool Redraw() + { + if (_font == null) + { + _font = FontManager.GetFont(UIConfig.defaultFont); + graphics.SetShaderAndTexture(_font.shader, _font.mainTexture); + _fontVersion = _font.version; + _textChanged = true; + } + + if (_font.keepCrisp && _renderScale != UIContentScaler.scaleFactor) + _textChanged = true; + + if (_font.version != _fontVersion) + { + _fontVersion = _font.version; + if (_font.mainTexture != graphics.texture) + { + graphics.SetShaderAndTexture(_font.shader, _font.mainTexture); + InvalidateBatchingState(); + } + + _textChanged = true; + } + + if (_textChanged) + BuildLines(); + + return graphics.UpdateMesh(); + } + + public int SetTypingEffectPos(int pos) + { + _typingEffectPos = pos; + graphics.SetMeshDirty(); + Redraw(); + pos = _typingEffectPos; + _typingEffectPos = -1; + return pos; + } + + /// + /// + /// + public bool HasCharacter(char ch) + { + return _font.HasCharacter(ch); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void GetLinesShape(int startLine, float startCharX, int endLine, float endCharX, + bool clipped, + List resultRects) + { + LineInfo line1 = _lines[startLine]; + LineInfo line2 = _lines[endLine]; + bool leftAlign = _textFormat.align == AlignType.Left; + if (startLine == endLine) + { + Rect r = Rect.MinMaxRect(startCharX, line1.y, endCharX, line1.y + line1.height); + if (clipped) + resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); + else + resultRects.Add(r); + } + else if (startLine == endLine - 1) + { + Rect r = Rect.MinMaxRect(startCharX, line1.y, leftAlign ? (GUTTER_X + line1.width) : _contentRect.xMax, line1.y + line1.height); + if (clipped) + resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); + else + resultRects.Add(r); + r = Rect.MinMaxRect(GUTTER_X, line1.y + line1.height, endCharX, line2.y + line2.height); + if (clipped) + resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); + else + resultRects.Add(r); + } + else + { + Rect r = Rect.MinMaxRect(startCharX, line1.y, leftAlign ? (GUTTER_X + line1.width) : _contentRect.xMax, line1.y + line1.height); + if (clipped) + resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); + else + resultRects.Add(r); + for (int i = startLine + 1; i < endLine; i++) + { + LineInfo line = _lines[i]; + r = Rect.MinMaxRect(GUTTER_X, r.yMax, leftAlign ? (GUTTER_X + line.width) : _contentRect.xMax, line.y + line.height); + if (clipped) + resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); + else + resultRects.Add(r); + } + r = Rect.MinMaxRect(GUTTER_X, r.yMax, endCharX, line2.y + line2.height); + if (clipped) + resultRects.Add(ToolSet.Intersection(ref r, ref _contentRect)); + else + resultRects.Add(r); + } + } + + override protected void OnSizeChanged() + { + if ((_flags & Flags.UpdatingSize) == 0) + { + if (_autoSize == AutoSizeType.Shrink || _autoSize == AutoSizeType.Ellipsis || _wordWrap && (_flags & Flags.WidthChanged) != 0) + _textChanged = true; + else if (_autoSize != AutoSizeType.None) + graphics.SetMeshDirty(); + + if (_verticalAlign != VertAlignType.Top) + ApplyVertAlign(); + } + + base.OnSizeChanged(); + } + + public override void EnsureSizeCorrect() + { + if (_textChanged && _autoSize != AutoSizeType.None) + BuildLines(); + } + + public override void Update(UpdateContext context) + { + if (_richTextField == null) //如果是richTextField,会在update前主动调用了Redraw + Redraw(); + + base.Update(context); + } + + /// + /// 准备字体纹理 + /// + void RequestText() + { + if (!_html) + { + _font.PrepareCharacters(_parsedText, _textFormat, _fontSizeScale); + if (_autoSize == AutoSizeType.Ellipsis) + _font.PrepareCharacters("…", _textFormat, _fontSizeScale); + } + else + { + int count = _elements.Count; + for (int i = 0; i < count; i++) + { + HtmlElement element = _elements[i]; + if (element.type == HtmlElementType.Text) + { + _font.SetFormat(element.format, _fontSizeScale); + _font.PrepareCharacters(element.text, element.format, _fontSizeScale); + if (_autoSize == AutoSizeType.Ellipsis) + _font.PrepareCharacters("…", element.format, _fontSizeScale); + } + } + } + } + + void BuildLines() + { + if (_font == null) + { + _font = FontManager.GetFont(UIConfig.defaultFont); + _fontVersion = _font.version; + graphics.SetShaderAndTexture(_font.shader, _font.mainTexture); + } + + _textChanged = false; + graphics.SetMeshDirty(); + _renderScale = UIContentScaler.scaleFactor; + _fontSizeScale = 1; + _ellipsisCharIndex = -1; + + Cleanup(); + + if (_text.Length == 0) + { + LineInfo emptyLine = LineInfo.Borrow(); + emptyLine.width = 0; + emptyLine.height = _font.GetLineHeight(_textFormat.size); + emptyLine.charIndex = emptyLine.charCount = 0; + emptyLine.y = emptyLine.y2 = GUTTER_Y; + _lines.Add(emptyLine); + + _textWidth = _textHeight = 0; + } + else + { + ParseText(); + + _font.Prepare(_textFormat); + + BuildLines2(); + + if (_font.BuildGraphics(graphics)) + InvalidateBatchingState(); + + if (_autoSize == AutoSizeType.Shrink) + DoShrink(); + } + + if (_autoSize == AutoSizeType.Both) + { + _flags |= Flags.UpdatingSize; + if (_richTextField != null) + { + if (_input) + { + float w = Mathf.Max(_textFormat.size, _textWidth); + float h = Mathf.Max(_font.GetLineHeight(_textFormat.size) + GUTTER_Y * 2, _textHeight); + _richTextField.SetSize(w, h); + } + else + _richTextField.SetSize(_textWidth, _textHeight); + } + else + SetSize(_textWidth, _textHeight); + InvalidateBatchingState(); + _flags &= ~Flags.UpdatingSize; + } + else if (_autoSize == AutoSizeType.Height) + { + _flags |= Flags.UpdatingSize; + if (_richTextField != null) + { + if (_input) + _richTextField.height = Mathf.Max(_font.GetLineHeight(_textFormat.size) + GUTTER_Y * 2, _textHeight); + else + _richTextField.height = _textHeight; + } + else + this.height = _textHeight; + InvalidateBatchingState(); + _flags &= ~Flags.UpdatingSize; + } + + _yOffset = 0; + ApplyVertAlign(); + } + + void ParseText() + { +#if RTL_TEXT_SUPPORT + _textDirection = RTLSupport.DetectTextDirection(_text); +#endif + if (_html) + { + HtmlParser.inst.Parse(_text, _textFormat, _elements, + _richTextField != null ? _richTextField.htmlParseOptions : null); + + _parsedText = string.Empty; + } + else + _parsedText = _text; + + int elementCount = _elements.Count; + if (elementCount == 0) + { + if (_textDirection != RTLSupport.DirectionType.UNKNOW) + _parsedText = RTLSupport.DoMapping(_parsedText); + + bool flag = _input || _richTextField != null && _richTextField.emojies != null; + if (!flag) + { + //检查文本中是否有需要转换的字符,如果没有,节省一个new StringBuilder的操作。 + int cnt = _parsedText.Length; + for (int i = 0; i < cnt; i++) + { + char ch = _parsedText[i]; + if (ch == '\r' || char.IsHighSurrogate(ch)) + { + flag = true; + break; + } + } + } + + if (flag) + { + StringBuilder buffer = new StringBuilder(); + ParseText(buffer, _parsedText, -1); + elementCount = _elements.Count; + _parsedText = buffer.ToString(); + } + } + else + { + StringBuilder buffer = new StringBuilder(); + int i = 0; + while (i < elementCount) + { + HtmlElement element = _elements[i]; + element.charIndex = buffer.Length; + if (element.type == HtmlElementType.Text) + { + if (_textDirection != RTLSupport.DirectionType.UNKNOW) + element.text = RTLSupport.DoMapping(element.text); + + i = ParseText(buffer, element.text, i); + elementCount = _elements.Count; + } + else if (element.isEntity) + buffer.Append(' '); + i++; + } + _parsedText = buffer.ToString(); + +#if RTL_TEXT_SUPPORT + // element.text拼接完后再进行一次判断文本主语序,避免html标签存在把文本变成混合文本 [2018/12/12/ 16:47:42 by aq_1000] + _textDirection = RTLSupport.DetectTextDirection(_parsedText); +#endif + } + } + + void BuildLines2() + { + float letterSpacing = _textFormat.letterSpacing * _fontSizeScale; + float lineSpacing = (_textFormat.lineSpacing - 1) * _fontSizeScale; + float rectWidth = _contentRect.width - GUTTER_X * 2; + float rectHeight = _contentRect.height > 0 ? Mathf.Max(_contentRect.height, _font.GetLineHeight(_textFormat.size)) : 0; + float glyphWidth = 0, glyphHeight = 0, baseline = 0; + short wordLen = 0; + bool wordPossible = false; + float posx = 0; + bool checkEdge = _autoSize == AutoSizeType.Ellipsis; + bool hasLine = _textFormat.underline || _textFormat.strikethrough; + + TextFormat format = _textFormat; + _font.SetFormat(format, _fontSizeScale); + bool wrap = _wordWrap && !_singleLine; + if (_maxWidth > 0) + { + wrap = true; + rectWidth = _maxWidth - GUTTER_X * 2; + } + _textWidth = _textHeight = 0; + + RequestText(); + + int elementCount = _elements.Count; + int elementIndex = 0; + HtmlElement element = null; + if (elementCount > 0) + element = _elements[elementIndex]; + int textLength = _parsedText.Length; + + LineInfo line = LineInfo.Borrow(); + _lines.Add(line); + line.y = line.y2 = GUTTER_Y; + sLineChars.Clear(); + + for (int charIndex = 0; charIndex < textLength; charIndex++) + { + char ch = _parsedText[charIndex]; + + glyphWidth = glyphHeight = baseline = 0; + + while (element != null && element.charIndex == charIndex) + { + if (element.type == HtmlElementType.Text) + { + format = element.format; + _font.SetFormat(format, _fontSizeScale); + + if (format.underline || format.strikethrough) + hasLine = true; + } + else + { + if (element.type == HtmlElementType.Link) + hasLine = true; + + IHtmlObject htmlObject = element.htmlObject; + if (_richTextField != null && htmlObject == null) + { + element.space = (int)(rectWidth - line.width - 4); + htmlObject = _richTextField.htmlPageContext.CreateObject(_richTextField, element); + element.htmlObject = htmlObject; + } + if (htmlObject != null) + { + glyphWidth = htmlObject.width + 2; + glyphHeight = htmlObject.height; + baseline = glyphHeight * IMAGE_BASELINE; + } + + if (element.isEntity) + ch = '\0'; //indicate it is a place holder + } + + elementIndex++; + if (elementIndex < elementCount) + element = _elements[elementIndex]; + else + element = null; + } + + if (ch == '\0' || ch == '\n') + { + wordPossible = false; + } + else if (_font.GetGlyph(ch == '\t' ? ' ' : ch, out glyphWidth, out glyphHeight, out baseline)) + { + if (ch == '\t') + glyphWidth *= 4; + + if (wordPossible) + { + if (char.IsWhiteSpace(ch)) + { + wordLen = 0; + } + else if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' + || ch >= '0' && ch <= '9' + || ch == '.' || ch == '"' || ch == '\'' + || format.specialStyle == TextFormat.SpecialStyle.Subscript + || format.specialStyle == TextFormat.SpecialStyle.Superscript + || _textDirection != RTLSupport.DirectionType.UNKNOW && RTLSupport.IsArabicLetter(ch)) + { + wordLen++; + } + else + wordPossible = false; + } + else if (char.IsWhiteSpace(ch)) + { + wordLen = 0; + wordPossible = true; + } + else if (format.specialStyle == TextFormat.SpecialStyle.Subscript + || format.specialStyle == TextFormat.SpecialStyle.Superscript) + { + if (sLineChars.Count > 0) + { + wordLen = 2; //避免上标和下标折到下一行 + wordPossible = true; + } + } + else + wordPossible = false; + } + else + wordPossible = false; + + sLineChars.Add(new LineCharInfo() { width = glyphWidth, height = glyphHeight, baseline = baseline }); + if (glyphWidth != 0) + { + if (posx != 0) + posx += letterSpacing; + posx += glyphWidth; + } + + if (ch == '\n' && !_singleLine) + { + UpdateLineInfo(line, letterSpacing, sLineChars.Count); + + LineInfo newLine = LineInfo.Borrow(); + _lines.Add(newLine); + newLine.y = line.y + (line.height + lineSpacing); + if (newLine.y < GUTTER_Y) //lineSpacing maybe negative + newLine.y = GUTTER_Y; + newLine.y2 = newLine.y; + newLine.charIndex = line.charIndex + line.charCount; + + if (checkEdge && line.y + line.height < rectHeight) + _ellipsisCharIndex = line.charIndex + Math.Max(0, line.charCount - ELLIPSIS_LENGTH); + + sLineChars.Clear(); + wordPossible = false; + posx = 0; + line = newLine; + } + else if (posx > rectWidth) + { + if (wrap) + { + int lineCharCount = sLineChars.Count; + int toMoveChars; + + if (wordPossible && wordLen < 20 && lineCharCount > 2) //if word had broken, move word to new line + { + toMoveChars = wordLen; + //we caculate the line width WITHOUT the tailing space + UpdateLineInfo(line, letterSpacing, lineCharCount - (toMoveChars + 1)); + line.charCount++; //but keep it in this line. + } + else + { + toMoveChars = lineCharCount > 1 ? 1 : 0; //if only one char here, we cant move it to new line + UpdateLineInfo(line, letterSpacing, lineCharCount - toMoveChars); + } + + LineInfo newLine = LineInfo.Borrow(); + _lines.Add(newLine); + newLine.y = line.y + (line.height + lineSpacing); + if (newLine.y < GUTTER_Y) + newLine.y = GUTTER_Y; + newLine.y2 = newLine.y; + newLine.charIndex = line.charIndex + line.charCount; + + posx = 0; + if (toMoveChars != 0) + { + for (int i = line.charCount; i < lineCharCount; i++) + { + LineCharInfo ci = sLineChars[i]; + if (posx != 0) + posx += letterSpacing; + posx += ci.width; + } + + sLineChars.RemoveRange(0, line.charCount); + } + else + sLineChars.Clear(); + + if (checkEdge && line.y + line.height < rectHeight) + _ellipsisCharIndex = line.charIndex + Math.Max(0, line.charCount - ELLIPSIS_LENGTH); + + wordPossible = false; + line = newLine; + } + else if (checkEdge && _ellipsisCharIndex == -1) + _ellipsisCharIndex = line.charIndex + Math.Max(0, sLineChars.Count - ELLIPSIS_LENGTH - 1); + } + } + + UpdateLineInfo(line, letterSpacing, sLineChars.Count); + + if (_textWidth > 0) + _textWidth += GUTTER_X * 2; + _textHeight = line.y + line.height + GUTTER_Y; + + if (checkEdge && _textWidth <= _contentRect.width && _textHeight <= _contentRect.height + GUTTER_Y) + _ellipsisCharIndex = -1; + + if (checkEdge) + _font.GetGlyph('…', out glyphWidth, out glyphHeight, out baseline); + if (hasLine) + _font.GetGlyph('_', out glyphWidth, out glyphHeight, out baseline); + + _textWidth = Mathf.RoundToInt(_textWidth); + _textHeight = Mathf.RoundToInt(_textHeight); + } + + void UpdateLineInfo(LineInfo line, float letterSpacing, int cnt) + { + for (int i = 0; i < cnt; i++) + { + LineCharInfo ci = sLineChars[i]; + if (ci.baseline > line.baseline) + { + line.height += (ci.baseline - line.baseline); + line.baseline = ci.baseline; + } + + if (ci.height - ci.baseline > line.height - line.baseline) + line.height += (ci.height - ci.baseline - (line.height - line.baseline)); + + if (ci.width > 0) + { + if (line.width != 0) + line.width += letterSpacing; + line.width += ci.width; + } + } + + if (line.height == 0) + { + if (_lines.Count == 1) + line.height = _textFormat.size; + else + line.height = _lines[_lines.Count - 2].height; + } + + if (line.width > _textWidth) + _textWidth = line.width; + + line.charCount = (short)cnt; + } + + void DoShrink() + { + if (_lines.Count > 1 && _textHeight > _contentRect.height) + { + //多行的情况,涉及到自动换行,得用二分法查找最合适的比例,会消耗多一点计算资源 + int low = 0; + int high = _textFormat.size; + + //先尝试猜测一个比例 + _fontSizeScale = Mathf.Sqrt(_contentRect.height / _textHeight); + int cur = Mathf.FloorToInt(_fontSizeScale * _textFormat.size); + + while (true) + { + LineInfo.Return(_lines); + BuildLines2(); + + if (_textWidth > _contentRect.width || _textHeight > _contentRect.height) + high = cur; + else + low = cur; + if (high - low > 1 || high != low && cur == high) + { + cur = low + (high - low) / 2; + _fontSizeScale = (float)cur / _textFormat.size; + } + else + break; + } + } + else if (_textWidth > _contentRect.width) + { + _fontSizeScale = _contentRect.width / _textWidth; + + LineInfo.Return(_lines); + BuildLines2(); + + if (_textWidth > _contentRect.width) //如果还超出,缩小一点再来一次 + { + int size = Mathf.FloorToInt(_textFormat.size * _fontSizeScale); + size--; + _fontSizeScale = (float)size / _textFormat.size; + + LineInfo.Return(_lines); + BuildLines2(); + } + } + } + + int ParseText(StringBuilder buffer, string source, int elementIndex) + { + int textLength = source.Length; + int j = 0; + int appendPos = 0; + bool hasEmojies = _richTextField != null && _richTextField.emojies != null; + while (j < textLength) + { + char ch = source[j]; + if (ch == '\r') + { + buffer.Append(source, appendPos, j - appendPos); + if (j != textLength - 1 && source[j + 1] == '\n') + j++; + appendPos = j + 1; + buffer.Append('\n'); + } + else + { + bool highSurrogate = char.IsHighSurrogate(ch); + if (hasEmojies) + { + uint emojiKey = 0; + Emoji emoji; + if (highSurrogate) + emojiKey = ((uint)source[j + 1] & 0x03FF) + ((((uint)ch & 0x03FF) + 0x40) << 10); + else + emojiKey = ch; + if (_richTextField.emojies.TryGetValue(emojiKey, out emoji)) + { + HtmlElement imageElement = HtmlElement.GetElement(HtmlElementType.Image); + imageElement.Set("src", emoji.url); + if (emoji.width != 0) + imageElement.Set("width", emoji.width); + if (emoji.height != 0) + imageElement.Set("height", emoji.height); + if (highSurrogate) + imageElement.text = source.Substring(j, 2); + else + imageElement.text = source.Substring(j, 1); + imageElement.format.align = _textFormat.align; + _elements.Insert(++elementIndex, imageElement); + + buffer.Append(source, appendPos, j - appendPos); + appendPos = j; + imageElement.charIndex = buffer.Length; + } + } + + if (highSurrogate) + { + buffer.Append(source, appendPos, j - appendPos); + appendPos = j + 2; + j++;//跳过lowSurrogate + buffer.Append(' '); + } + } + j++; + } + if (appendPos < textLength) + buffer.Append(source, appendPos, j - appendPos); + + return elementIndex; + } + + public void OnPopulateMesh(VertexBuffer vb) + { + if (_textWidth == 0 && _lines.Count == 1 || _typingEffectPos == 0) + { + if (_charPositions != null) + { + _charPositions.Clear(); + _charPositions.Add(new CharPosition()); + } + + if (_richTextField != null) + _richTextField.RefreshObjects(); + + if (_typingEffectPos >= 0 && _textWidth == 0 && _lines.Count == 1) + _typingEffectPos = -1; + + return; + } + + float letterSpacing = _textFormat.letterSpacing * _fontSizeScale; + TextFormat format = _textFormat; + _font.SetFormat(format, _fontSizeScale); + _font.StartDraw(graphics); + + float rectWidth = _contentRect.width > 0 ? (_contentRect.width - GUTTER_X * 2) : 0; + float rectHeight = _contentRect.height > 0 ? Mathf.Max(_contentRect.height, _font.GetLineHeight(format.size)) : 0; + + if (_charPositions != null) + _charPositions.Clear(); + + HtmlLink currentLink = null; + float linkStartX = 0; + int linkStartLine = 0; + + float posx = 0; + float indent_x; + bool clipping = !_input && (_autoSize == AutoSizeType.None || _autoSize == AutoSizeType.Ellipsis); + bool lineClipped; + AlignType lineAlign; + float glyphWidth, glyphHeight, baseline; + int charCount = 0; + float underlineStart; + float strikethroughStart; + int minFontSize; + int maxFontSize; + string rtlLine = null; + + int elementIndex = 0; + int elementCount = _elements.Count; + HtmlElement element = null; + if (elementCount > 0) + element = _elements[elementIndex]; + + int lineCount = _lines.Count; + for (int i = 0; i < lineCount; ++i) + { + LineInfo line = _lines[i]; + if (line.charCount == 0) + continue; + + lineClipped = clipping && i != 0 && line.y + line.height > rectHeight; + lineAlign = format.align; + if (element != null && element.charIndex == line.charIndex) + lineAlign = element.format.align; + else + lineAlign = format.align; + + if (_textDirection == RTLSupport.DirectionType.RTL) + { + if (lineAlign == AlignType.Center) + indent_x = (int)((rectWidth + line.width) / 2); + else if (lineAlign == AlignType.Right) + indent_x = rectWidth; + else + indent_x = line.width + GUTTER_X * 2; + + if (indent_x > rectWidth) + indent_x = rectWidth; + + posx = indent_x - GUTTER_X; + } + else + { + if (lineAlign == AlignType.Center) + indent_x = (int)((rectWidth - line.width) / 2); + else if (lineAlign == AlignType.Right) + indent_x = rectWidth - line.width; + else + indent_x = 0; + + if (indent_x < 0) + indent_x = 0; + + posx = GUTTER_X + indent_x; + } + + int lineCharCount = line.charCount; + underlineStart = posx; + strikethroughStart = posx; + minFontSize = maxFontSize = format.size; + + if (_textDirection != RTLSupport.DirectionType.UNKNOW) + { + rtlLine = _parsedText.Substring(line.charIndex, lineCharCount); + if (_textDirection == RTLSupport.DirectionType.RTL) + rtlLine = RTLSupport.ConvertLineR(rtlLine); + else + rtlLine = RTLSupport.ConvertLineL(rtlLine); + lineCharCount = rtlLine.Length; + } + + for (int j = 0; j < lineCharCount; j++) + { + int charIndex = line.charIndex + j; + char ch = rtlLine != null ? rtlLine[j] : _parsedText[charIndex]; + bool isEllipsis = charIndex == _ellipsisCharIndex; + + while (element != null && charIndex == element.charIndex) + { + if (element.type == HtmlElementType.Text) + { + if (format.underline != element.format.underline) + { + if (format.underline) + { + if (!lineClipped) + { + float lineWidth; + if (_textDirection == RTLSupport.DirectionType.UNKNOW) + lineWidth = (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx) - underlineStart; + else + lineWidth = underlineStart - (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx); + if (lineWidth > 0) + _font.DrawLine(vb, underlineStart < posx ? underlineStart : posx, -(line.y + line.baseline), lineWidth, maxFontSize, 0); + } + maxFontSize = 0; + } + else + underlineStart = posx; + } + + if (format.strikethrough != element.format.strikethrough) + { + if (format.strikethrough) + { + if (!lineClipped) + { + float lineWidth; + if (_textDirection == RTLSupport.DirectionType.UNKNOW) + lineWidth = (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx) - strikethroughStart; + else + lineWidth = strikethroughStart - (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx); + if (lineWidth > 0) + _font.DrawLine(vb, strikethroughStart < posx ? strikethroughStart : posx, -(line.y + line.baseline), lineWidth, minFontSize, 1); + } + minFontSize = int.MaxValue; + } + else + strikethroughStart = posx; + } + + format = element.format; + minFontSize = Math.Min(minFontSize, format.size); + maxFontSize = Math.Max(maxFontSize, format.size); + _font.SetFormat(format, _fontSizeScale); + } + else if (element.type == HtmlElementType.Link) + { + currentLink = (HtmlLink)element.htmlObject; + if (currentLink != null) + { + element.position = Vector2.zero; + currentLink.SetPosition(0, 0); + linkStartX = posx; + linkStartLine = i; + } + } + else if (element.type == HtmlElementType.LinkEnd) + { + if (currentLink != null) + { + currentLink.SetArea(linkStartLine, linkStartX, i, posx); + currentLink = null; + } + } + else + { + IHtmlObject htmlObj = element.htmlObject; + if (htmlObj != null) + { + if (_textDirection == RTLSupport.DirectionType.RTL) + posx -= htmlObj.width - 2; + + if (_typingEffectPos > 0 && charCount == _typingEffectPos) + goto out_loop; + + if (_charPositions != null) + { + CharPosition cp = new CharPosition(); + cp.lineIndex = (short)i; + cp.charIndex = charCount; + cp.offsetX = posx; + cp.width = (short)htmlObj.width; + _charPositions.Add(cp); + } + charCount++; + + if (isEllipsis || lineClipped || clipping && (posx < GUTTER_X || posx > GUTTER_X && posx + htmlObj.width > _contentRect.width - GUTTER_X)) + element.status |= 1; + else + element.status &= 254; + element.status &= 253; + + element.position = new Vector2(posx + 1, line.y + line.baseline - htmlObj.height * IMAGE_BASELINE); + htmlObj.SetPosition(element.position.x, element.position.y); + + if (_textDirection == RTLSupport.DirectionType.RTL) + posx -= letterSpacing; + else + posx += htmlObj.width + letterSpacing + 2; + } + } + + if (element.isEntity) + ch = '\0'; + + elementIndex++; + if (elementIndex < elementCount) + element = _elements[elementIndex]; + else + element = null; + } + + if (isEllipsis) + ch = '…'; + else if (ch == '\0') + continue; + + if (_font.GetGlyph(ch == '\t' ? ' ' : ch, out glyphWidth, out glyphHeight, out baseline)) + { + if (ch == '\t') + glyphWidth *= 4; + + if (!isEllipsis) + { + if (_textDirection == RTLSupport.DirectionType.RTL) + { + if (lineClipped || clipping && (rectWidth < 7 || posx != (indent_x - GUTTER_X)) && posx < GUTTER_X - 0.5f) //超出区域,剪裁 + { + posx -= (letterSpacing + glyphWidth); + continue; + } + + posx -= glyphWidth; + } + else + { + if (lineClipped || clipping && (rectWidth < 7 || posx != (GUTTER_X + indent_x)) && posx + glyphWidth > _contentRect.width - GUTTER_X + 0.5f) //超出区域,剪裁 + { + posx += letterSpacing + glyphWidth; + continue; + } + } + } + + if (_typingEffectPos > 0 && charCount == _typingEffectPos) + { + if (char.IsWhiteSpace(ch)) + _typingEffectPos++; + else + goto out_loop; + } + + if (_charPositions != null) + { + CharPosition cp = new CharPosition(); + cp.lineIndex = (short)i; + cp.charIndex = charCount; + cp.offsetX = posx; + cp.width = (short)glyphWidth; + _charPositions.Add(cp); + } + charCount++; + + _font.DrawGlyph(vb, posx, -(line.y + line.baseline)); + + if (_textDirection == RTLSupport.DirectionType.RTL) + posx -= letterSpacing; + else + posx += letterSpacing + glyphWidth; + } + else //if GetGlyph failed + { + if (_typingEffectPos > 0 && charCount == _typingEffectPos) + _typingEffectPos++; + + if (_charPositions != null) + { + CharPosition cp = new CharPosition(); + cp.lineIndex = (short)i; + cp.charIndex = charCount; + cp.offsetX = posx; + _charPositions.Add(cp); + } + charCount++; + + if (_textDirection == RTLSupport.DirectionType.RTL) + posx -= letterSpacing; + else + posx += letterSpacing; + } + + if (isEllipsis) + lineClipped = true; + }//text loop + + if (!lineClipped) + { + if (format.underline) + { + float lineWidth; + if (_textDirection == RTLSupport.DirectionType.UNKNOW) + lineWidth = (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx) - underlineStart; + else + lineWidth = underlineStart - (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx); + if (lineWidth > 0) + _font.DrawLine(vb, underlineStart < posx ? underlineStart : posx, -(line.y + line.baseline), lineWidth, maxFontSize, 0); + } + + if (format.strikethrough) + { + float lineWidth; + if (_textDirection == RTLSupport.DirectionType.UNKNOW) + lineWidth = (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx) - strikethroughStart; + else + lineWidth = strikethroughStart - (clipping ? Mathf.Clamp(posx, GUTTER_X, GUTTER_X + rectWidth) : posx); + if (lineWidth > 0) + _font.DrawLine(vb, strikethroughStart < posx ? strikethroughStart : posx, -(line.y + line.baseline), lineWidth, minFontSize, 1); + } + } + + }//line loop + + if (element != null && element.type == HtmlElementType.LinkEnd && currentLink != null) + currentLink.SetArea(linkStartLine, linkStartX, lineCount - 1, posx); + + if (_charPositions != null) + { + CharPosition cp = new CharPosition(); + cp.lineIndex = (short)(lineCount - 1); + cp.charIndex = charCount; + cp.offsetX = posx; + _charPositions.Add(cp); + } + charCount++; + + out_loop: + + if (_typingEffectPos > 0) + { + if (charCount == _typingEffectPos) + _typingEffectPos++; + else + _typingEffectPos = -1; + } + + vb.CheckMeshLimit(); + + if (_font.customOutline) + { + if (_textFormat.outline != 0) + vb.GenerateOutline(UIConfig.enhancedTextOutlineEffect ? 8 : 4, _textFormat.outline, _textFormat.outlineColor); + if (_textFormat.shadowOffset.x != 0 || _textFormat.shadowOffset.y != 0) + vb.GenerateShadow(_textFormat.shadowOffset, _textFormat.shadowColor); + } + + vb.AddTriangles(); + + if (_richTextField != null) + _richTextField.RefreshObjects(); + } + + void Cleanup() + { + if (_richTextField != null) + _richTextField.CleanupObjects(); + + HtmlElement.ReturnElements(_elements); + LineInfo.Return(_lines); + _textWidth = 0; + _textHeight = 0; + _parsedText = string.Empty; + _textDirection = RTLSupport.DirectionType.UNKNOW; + + if (_charPositions != null) + _charPositions.Clear(); + } + + void ApplyVertAlign() + { + float oldOffset = _yOffset; + if (_autoSize == AutoSizeType.Both || _autoSize == AutoSizeType.Height + || _verticalAlign == VertAlignType.Top) + _yOffset = 0; + else + { + float dh; + if (_textHeight == 0 && _lines.Count > 0) + dh = _contentRect.height - _lines[0].height; + else + dh = _contentRect.height - _textHeight; + if (dh < 0) + dh = 0; + if (_verticalAlign == VertAlignType.Middle) + _yOffset = (int)(dh / 2); + else + _yOffset = dh; + } + + if (oldOffset != _yOffset) + { + int cnt = _lines.Count; + for (int i = 0; i < cnt; i++) + _lines[i].y = _lines[i].y2 + _yOffset; + + graphics.SetMeshDirty(); + } + } + + /// + /// + /// + public class LineInfo + { + /// + /// 行的宽度 + /// + public float width; + + /// + /// 行的高度 + /// + public float height; + + /// + /// 文字渲染基线 + /// + public float baseline; + + /// + /// 行首的字符索引 + /// + public int charIndex; + + /// + /// 行包括的字符个数 + /// + public short charCount; + + /// + /// 行的y轴位置 + /// + public float y; + + /// + /// 行的y轴位置的备份 + /// + internal float y2; + + static Stack pool = new Stack(); + + /// + /// + /// + /// + public static LineInfo Borrow() + { + if (pool.Count > 0) + { + LineInfo ret = pool.Pop(); + ret.width = ret.height = ret.baseline = 0; + ret.y = ret.y2 = 0; + ret.charIndex = ret.charCount = 0; + return ret; + } + else + return new LineInfo(); + } + + /// + /// + /// + /// + public static void Return(LineInfo value) + { + pool.Push(value); + } + + /// + /// + /// + /// + public static void Return(List values) + { + int cnt = values.Count; + for (int i = 0; i < cnt; i++) + pool.Push(values[i]); + + values.Clear(); + } + } + + /// + /// + /// + public struct LineCharInfo + { + public float width; + public float height; + public float baseline; + } + + /// + /// + /// + public struct CharPosition + { + /// + /// 字符索引 + /// + public int charIndex; + + /// + /// 字符所在的行索引 + /// + public short lineIndex; + + /// + /// 字符的x偏移 + /// + public float offsetX; + + /// + /// 字符的宽度 + /// + public short width; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs.meta new file mode 100644 index 0000000..599f735 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextField.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d8a05d6d82201104cb6b5156ca294f54 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs new file mode 100644 index 0000000..a61a4aa --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs @@ -0,0 +1,175 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public partial class TextFormat + { + public enum SpecialStyle + { + None, + Superscript, + Subscript + } + + /// + /// + /// + public int size; + + /// + /// + /// + public string font; + + /// + /// + /// + public Color color; + + /// + /// + /// + public int lineSpacing; + + /// + /// + /// + public int letterSpacing; + + /// + /// + /// + public bool bold; + + /// + /// + /// + public bool underline; + + /// + /// + /// + public bool italic; + + /// + /// + /// + public bool strikethrough; + + /// + /// + /// + public Color32[] gradientColor; + + /// + /// + /// + public AlignType align; + + /// + /// + /// + public SpecialStyle specialStyle; + + /// + /// + /// + public float outline; + + /// + /// + /// + public Color outlineColor; + + /// + /// + /// + public Vector2 shadowOffset; + + /// + /// + /// + public Color shadowColor; + + public TextFormat() + { + color = Color.black; + size = 12; + lineSpacing = 3; + outlineColor = shadowColor = Color.black; + } + + /// + /// + /// + /// + public void SetColor(uint value) + { + uint rr = (value >> 16) & 0x0000ff; + uint gg = (value >> 8) & 0x0000ff; + uint bb = value & 0x0000ff; + float r = rr / 255.0f; + float g = gg / 255.0f; + float b = bb / 255.0f; + color = new Color(r, g, b, 1); + } + + /// + /// + /// + /// + /// + public bool EqualStyle(TextFormat aFormat) + { + return size == aFormat.size && color == aFormat.color + && bold == aFormat.bold && underline == aFormat.underline + && italic == aFormat.italic + && strikethrough == aFormat.strikethrough + && gradientColor == aFormat.gradientColor + && align == aFormat.align + && specialStyle == aFormat.specialStyle; + } + + /// + /// Only base NOT all formats will be copied + /// + /// + public void CopyFrom(TextFormat source) + { + this.size = source.size; + this.font = source.font; + this.color = source.color; + this.lineSpacing = source.lineSpacing; + this.letterSpacing = source.letterSpacing; + this.bold = source.bold; + this.underline = source.underline; + this.italic = source.italic; + this.strikethrough = source.strikethrough; + if (source.gradientColor != null) + { + this.gradientColor = new Color32[4]; + source.gradientColor.CopyTo(this.gradientColor, 0); + } + else + this.gradientColor = null; + this.align = source.align; + this.specialStyle = source.specialStyle; + } + + public void FillVertexColors(Color32[] vertexColors) + { + if (gradientColor == null) + vertexColors[0] = vertexColors[1] = vertexColors[2] = vertexColors[3] = color; + else + { + vertexColors[0] = gradientColor[1]; + vertexColors[1] = gradientColor[0]; + vertexColors[2] = gradientColor[2]; + vertexColors[3] = gradientColor[3]; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs.meta new file mode 100644 index 0000000..1dbb481 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TextFormat.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ecffbe294c108da4ab8a1c573e3d4dfd +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs new file mode 100644 index 0000000..dd637ab --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs @@ -0,0 +1,65 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class TouchScreenKeyboard : IKeyboard + { + UnityEngine.TouchScreenKeyboard _keyboard; + + public bool done + { +#if UNITY_2017_2_OR_NEWER + get + { + return _keyboard == null + || _keyboard.status == UnityEngine.TouchScreenKeyboard.Status.Done + || _keyboard.status == UnityEngine.TouchScreenKeyboard.Status.Canceled + || _keyboard.status == UnityEngine.TouchScreenKeyboard.Status.LostFocus; + } +#else + get { return _keyboard == null || _keyboard.done || _keyboard.wasCanceled; } +#endif + } + + public bool supportsCaret + { + get { return false; } + } + + public string GetInput() + { + if (_keyboard != null) + { + string s = _keyboard.text; + + if (this.done) + _keyboard = null; + + return s; + } + else + return null; + } + + public void Open(string text, bool autocorrection, bool multiline, bool secure, bool alert, string textPlaceholder, int keyboardType, bool hideInput) + { + if (_keyboard != null) + return; + + UnityEngine.TouchScreenKeyboard.hideInput = hideInput; + _keyboard = UnityEngine.TouchScreenKeyboard.Open(text, (TouchScreenKeyboardType)keyboardType, autocorrection, multiline, secure, alert, textPlaceholder); + } + + public void Close() + { + if (_keyboard != null) + { + _keyboard.active = false; + _keyboard = null; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs.meta new file mode 100644 index 0000000..572dab2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TouchScreenKeyboard.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cb24d1c92a1114a4f9db5688cc3fa35b +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs new file mode 100644 index 0000000..1389d1a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs @@ -0,0 +1,134 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// 文字打字效果。先调用Start,然后Print。 + /// + public class TypingEffect + { + protected TextField _textField; + + protected int _printIndex; + + protected bool _started; + + /// + /// + /// + /// + public TypingEffect(TextField textField) + { + _textField = textField; + } + + /// + /// + /// + /// + public TypingEffect(GTextField textField) + { + if (textField is GRichTextField) + _textField = ((RichTextField)textField.displayObject).textField; + else + _textField = (TextField)textField.displayObject; + } + + /// + /// 总输出次数 + /// + public int totalTimes + { + get + { + int times = 0; + for (int i = 0; i < _textField.parsedText.Length; i++) + { + if (!char.IsWhiteSpace(_textField.parsedText[i])) + times++; + } + if (_textField.richTextField != null) + { + for (int i = 0; i < _textField.richTextField.htmlElementCount; i++) + { + if (_textField.richTextField.GetHtmlElementAt(i).isEntity) + times++; + } + } + return times; + } + } + + /// + /// 开始打字效果。可以重复调用重复启动。 + /// + public void Start() + { + if (_textField.SetTypingEffectPos(0) != -1) + { + _started = true; + _printIndex = 1; + + //隐藏所有混排的对象 + if (_textField.richTextField != null) + { + int ec = _textField.richTextField.htmlElementCount; + for (int i = 0; i < ec; i++) + _textField.richTextField.ShowHtmlObject(i, false); + } + } + else + _started = false; + } + + /// + /// 输出一个字符。如果已经没有剩余的字符,返回false。 + /// + /// + public bool Print() + { + if (!_started) + return false; + + _printIndex = _textField.SetTypingEffectPos(_printIndex); + if (_printIndex != -1) + return true; + else + { + _started = false; + return false; + } + } + + /// + /// 打印的协程。 + /// + /// 每个字符输出的时间间隔 + /// + public IEnumerator Print(float interval) + { + while (Print()) + yield return new WaitForSeconds(interval); + } + + /// + /// 使用固定时间间隔完成整个打印过程。 + /// + /// + public void PrintAll(float interval) + { + Timers.inst.StartCoroutine(Print(interval)); + } + + public void Cancel() + { + if (!_started) + return; + + _started = false; + _textField.SetTypingEffectPos(-1); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs.meta new file mode 100644 index 0000000..f1fde14 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/Text/TypingEffect.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 213be0a4bfae47c4ebf643f5ee856399 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs b/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs new file mode 100644 index 0000000..b6a65ee --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs @@ -0,0 +1,319 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// UpdateContext is for internal use. + /// + public class UpdateContext + { + public struct ClipInfo + { + public Rect rect; + public Vector4 clipBox; + public bool soft; + public Vector4 softness;//left-top-right-bottom + public uint clipId; + public int rectMaskDepth; + public int referenceValue; + public bool reversed; + } + + Stack _clipStack; + + public bool clipped; + public ClipInfo clipInfo; + + public int renderingOrder; + public int batchingDepth; + public int rectMaskDepth; + public int stencilReferenceValue; + public int stencilCompareValue; + + public float alpha; + public bool grayed; + + public static UpdateContext current; + public static bool working; + + public static event Action OnBegin; + public static event Action OnEnd; + + static Action _tmpBegin; + + public UpdateContext() + { + _clipStack = new Stack(); + } + + /// + /// + /// + public void Begin() + { + current = this; + + renderingOrder = 0; + batchingDepth = 0; + rectMaskDepth = 0; + stencilReferenceValue = 0; + alpha = 1; + grayed = false; + + clipped = false; + _clipStack.Clear(); + + Stats.ObjectCount = 0; + Stats.GraphicsCount = 0; + + _tmpBegin = OnBegin; + OnBegin = null; + + //允许OnBegin里再次Add,这里没有做死锁检查 + while (_tmpBegin != null) + { + _tmpBegin.Invoke(); + _tmpBegin = OnBegin; + OnBegin = null; + } + + working = true; + } + + /// + /// + /// + public void End() + { + working = false; + + if (OnEnd != null) + OnEnd.Invoke(); + + OnEnd = null; + } + + /// + /// + /// + /// + /// + /// + public void EnterClipping(uint clipId, Rect clipRect, Vector4? softness) + { + _clipStack.Push(clipInfo); + + if (rectMaskDepth > 0) + clipRect = ToolSet.Intersection(ref clipInfo.rect, ref clipRect); + + clipped = true; + clipInfo.rectMaskDepth = ++rectMaskDepth; + /* clipPos = xy * clipBox.zw + clipBox.xy + * 利用这个公式,使clipPos变为当前顶点距离剪切区域中心的距离值,剪切区域的大小为2x2 + * 那么abs(clipPos)>1的都是在剪切区域外 + */ + clipInfo.rect = clipRect; + clipRect.x = clipRect.x + clipRect.width * 0.5f; + clipRect.y = clipRect.y + clipRect.height * 0.5f; + clipRect.width *= 0.5f; + clipRect.height *= 0.5f; + if (clipRect.width == 0 || clipRect.height == 0) + clipInfo.clipBox = new Vector4(-2, -2, 0, 0); + else + clipInfo.clipBox = new Vector4(-clipRect.x / clipRect.width, -clipRect.y / clipRect.height, + 1.0f / clipRect.width, 1.0f / clipRect.height); + clipInfo.clipId = clipId; + clipInfo.soft = softness != null; + if (clipInfo.soft) + { + clipInfo.softness = (Vector4)softness; + float vx = clipInfo.rect.width * Screen.height * 0.25f; + float vy = clipInfo.rect.height * Screen.height * 0.25f; + + if (clipInfo.softness.x > 0) + clipInfo.softness.x = vx / clipInfo.softness.x; + else + clipInfo.softness.x = 10000f; + + if (clipInfo.softness.y > 0) + clipInfo.softness.y = vy / clipInfo.softness.y; + else + clipInfo.softness.y = 10000f; + + if (clipInfo.softness.z > 0) + clipInfo.softness.z = vx / clipInfo.softness.z; + else + clipInfo.softness.z = 10000f; + + if (clipInfo.softness.w > 0) + clipInfo.softness.w = vy / clipInfo.softness.w; + else + clipInfo.softness.w = 10000f; + } + } + + /// + /// + /// + /// + /// + public void EnterClipping(uint clipId, bool reversedMask) + { + _clipStack.Push(clipInfo); + + if (stencilReferenceValue == 0) + stencilReferenceValue = 1; + else + stencilReferenceValue = stencilReferenceValue << 1; + + if (reversedMask) + { + if (clipInfo.reversed) + stencilCompareValue = (stencilReferenceValue >> 1) - 1; + else + stencilCompareValue = stencilReferenceValue - 1; + } + else + stencilCompareValue = (stencilReferenceValue << 1) - 1; + + clipInfo.clipId = clipId; + clipInfo.referenceValue = stencilReferenceValue; + clipInfo.reversed = reversedMask; + clipped = true; + } + + /// + /// + /// + public void LeaveClipping() + { + clipInfo = _clipStack.Pop(); + stencilReferenceValue = clipInfo.referenceValue; + rectMaskDepth = clipInfo.rectMaskDepth; + clipped = stencilReferenceValue != 0 || rectMaskDepth != 0; + } + + public void EnterPaintingMode() + { + //Reset clipping + _clipStack.Push(clipInfo); + + clipInfo.rectMaskDepth = 0; + clipInfo.referenceValue = 0; + clipInfo.reversed = false; + clipped = false; + } + + public void LeavePaintingMode() + { + clipInfo = _clipStack.Pop(); + stencilReferenceValue = clipInfo.referenceValue; + rectMaskDepth = clipInfo.rectMaskDepth; + clipped = stencilReferenceValue != 0 || rectMaskDepth != 0; + } + + public void ApplyClippingProperties(Material mat, bool isStdMaterial) + { + if (rectMaskDepth > 0) //在矩形剪裁下,且不是遮罩对象 + { + mat.SetVector(ShaderConfig.ID_ClipBox, clipInfo.clipBox); + if (clipInfo.soft) + mat.SetVector(ShaderConfig.ID_ClipSoftness, clipInfo.softness); + } + + if (stencilReferenceValue > 0) + { + mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Equal); + mat.SetInt(ShaderConfig.ID_Stencil, stencilCompareValue); + mat.SetInt(ShaderConfig.ID_Stencil2, stencilCompareValue); + mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Keep); + mat.SetInt(ShaderConfig.ID_StencilReadMask, stencilReferenceValue | (stencilReferenceValue - 1)); + mat.SetInt(ShaderConfig.ID_ColorMask, 15); + } + else + { + mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Always); + mat.SetInt(ShaderConfig.ID_Stencil, 0); + mat.SetInt(ShaderConfig.ID_Stencil2, 0); + mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Keep); + mat.SetInt(ShaderConfig.ID_StencilReadMask, 255); + mat.SetInt(ShaderConfig.ID_ColorMask, 15); + } + + if (!isStdMaterial) + { + if (rectMaskDepth > 0) + { + if (clipInfo.soft) + mat.EnableKeyword("SOFT_CLIPPED"); + else + mat.EnableKeyword("CLIPPED"); + } + else + { + mat.DisableKeyword("CLIPPED"); + mat.DisableKeyword("SOFT_CLIPPED"); + } + } + } + + public void ApplyAlphaMaskProperties(Material mat, bool erasing) + { + if (!erasing) + { + if (stencilReferenceValue == 1) + { + mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Always); + mat.SetInt(ShaderConfig.ID_Stencil, 1); + mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Replace); + mat.SetInt(ShaderConfig.ID_StencilReadMask, 255); + mat.SetInt(ShaderConfig.ID_ColorMask, 0); + } + else + { + if (stencilReferenceValue != 0 & _clipStack.Peek().reversed) + mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.NotEqual); + else + mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Equal); + mat.SetInt(ShaderConfig.ID_Stencil, stencilReferenceValue | (stencilReferenceValue - 1)); + mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Replace); + mat.SetInt(ShaderConfig.ID_StencilReadMask, stencilReferenceValue - 1); + mat.SetInt(ShaderConfig.ID_ColorMask, 0); + } + } + else + { + if (stencilReferenceValue != 0 & _clipStack.Peek().reversed) + { + int refValue = stencilReferenceValue | (stencilReferenceValue - 1); + mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Equal); + mat.SetInt(ShaderConfig.ID_Stencil, refValue); + mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Zero); + mat.SetInt(ShaderConfig.ID_StencilReadMask, refValue); + mat.SetInt(ShaderConfig.ID_ColorMask, 0); + } + else + { + int refValue = stencilReferenceValue - 1; + mat.SetInt(ShaderConfig.ID_StencilComp, (int)UnityEngine.Rendering.CompareFunction.Equal); + mat.SetInt(ShaderConfig.ID_Stencil, refValue); + mat.SetInt(ShaderConfig.ID_StencilOp, (int)UnityEngine.Rendering.StencilOp.Replace); + mat.SetInt(ShaderConfig.ID_StencilReadMask, refValue); + mat.SetInt(ShaderConfig.ID_ColorMask, 0); + } + } + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + OnBegin = null; + OnEnd = null; + } +#endif + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs.meta new file mode 100644 index 0000000..63eca16 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Core/UpdateContext.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fa81e163380612a4a9591fe57a5b442c +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event.meta b/Assets/Plugins/FairyGUI/Scripts/Event.meta new file mode 100644 index 0000000..b332a76 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: faa71f0e576742d46865b6bb7422b7f0 +folderAsset: yes +timeCreated: 1460480287 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs b/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs new file mode 100644 index 0000000..38bd08a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs @@ -0,0 +1,176 @@ +#if FAIRYGUI_TOLUA +using System; +using LuaInterface; +#endif + +namespace FairyGUI +{ + /// + /// + /// + class EventBridge + { + public EventDispatcher owner; + + EventCallback0 _callback0; + EventCallback1 _callback1; + EventCallback1 _captureCallback; + internal bool _dispatching; + + public EventBridge(EventDispatcher owner) + { + this.owner = owner; + } + + public void AddCapture(EventCallback1 callback) + { + _captureCallback -= callback; + _captureCallback += callback; + } + + public void RemoveCapture(EventCallback1 callback) + { + _captureCallback -= callback; + } + + public void Add(EventCallback1 callback) + { + _callback1 -= callback; + _callback1 += callback; + } + + public void Remove(EventCallback1 callback) + { + _callback1 -= callback; + } + + public void Add(EventCallback0 callback) + { + _callback0 -= callback; + _callback0 += callback; + } + + public void Remove(EventCallback0 callback) + { + _callback0 -= callback; + } + +#if FAIRYGUI_TOLUA + public void Add(LuaFunction func, LuaTable self) + { + EventCallback1 callback; + if(self != null) + callback = (EventCallback1)DelegateTraits.Create(func, self); + else + callback = (EventCallback1)DelegateTraits.Create(func); + _callback1 -= callback; + _callback1 += callback; + } + + public void Add(LuaFunction func, GComponent self) + { + if (self._peerTable == null) + throw new Exception("self is not connected to lua."); + + Add(func, self._peerTable); + } + + public void Remove(LuaFunction func, LuaTable self) + { + LuaState state = func.GetLuaState(); + LuaDelegate target; + if (self != null) + target = state.GetLuaDelegate(func, self); + else + target = state.GetLuaDelegate(func); + + Delegate[] ds = _callback1.GetInvocationList(); + + for (int i = 0; i < ds.Length; i++) + { + LuaDelegate ld = ds[i].Target as LuaDelegate; + if (ld != null && ld.Equals(target)) + { + _callback1 = (EventCallback1)Delegate.Remove(_callback1, ds[i]); + //DelayDispose will cause problem + //state.DelayDispose(ld.func); + //if (ld.self != null) + // state.DelayDispose(ld.self); + break; + } + } + } + + public void Remove(LuaFunction func, GComponent self) + { + if (self._peerTable == null) + throw new Exception("self is not connected to lua."); + + Remove(func, self._peerTable); + } +#endif + + public bool isEmpty + { + get { return _callback1 == null && _callback0 == null && _captureCallback == null; } + } + + public void Clear() + { +#if FAIRYGUI_TOLUA + //if (_callback1 != null) + //{ + // Delegate[] ds = _callback1.GetInvocationList(); + // for (int i = 0; i < ds.Length; i++) + // { + // LuaDelegate ld = ds[i].Target as LuaDelegate; + // if (ld != null) + // { + // LuaState state = ld.func.GetLuaState(); + // state.DelayDispose(ld.func); + // if (ld.self != null) + // state.DelayDispose(ld.self); + // } + // } + //} +#endif + _callback1 = null; + _callback0 = null; + _captureCallback = null; + } + + public void CallInternal(EventContext context) + { + _dispatching = true; + context.sender = owner; + try + { + if (_callback1 != null) + _callback1(context); + if (_callback0 != null) + _callback0(); + } + finally + { + _dispatching = false; + } + } + + public void CallCaptureInternal(EventContext context) + { + if (_captureCallback == null) + return; + + _dispatching = true; + context.sender = owner; + try + { + _captureCallback(context); + } + finally + { + _dispatching = false; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs.meta new file mode 100644 index 0000000..e4e2f75 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/EventBridge.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e9712bee5e6977647989e012a6a332a6 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs b/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs new file mode 100644 index 0000000..bc742ae --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs @@ -0,0 +1,105 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class EventContext + { + /// + /// + /// + public EventDispatcher sender { get; internal set; } + + /// + /// / + /// + public object initiator { get; internal set; } + + /// + /// / + /// + public InputEvent inputEvent { get; internal set; } + + /// + /// + /// + public string type; + + /// + /// + /// + public object data; + + internal bool _defaultPrevented; + internal bool _stopsPropagation; + internal bool _touchCapture; + + internal List callChain = new List(); + + /// + /// + /// + public void StopPropagation() + { + _stopsPropagation = true; + } + + /// + /// + /// + public void PreventDefault() + { + _defaultPrevented = true; + } + + /// + /// + /// + public void CaptureTouch() + { + _touchCapture = true; + } + + /// + /// + /// + public bool isDefaultPrevented + { + get { return _defaultPrevented; } + } + + static Stack pool = new Stack(); + internal static EventContext Get() + { + if (pool.Count > 0) + { + EventContext context = pool.Pop(); + context._stopsPropagation = false; + context._defaultPrevented = false; + context._touchCapture = false; + return context; + } + else + return new EventContext(); + } + + internal static void Return(EventContext value) + { + pool.Push(value); + } + + + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + pool.Clear(); + } +#endif + } + +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs.meta new file mode 100644 index 0000000..1e00260 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/EventContext.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3391a1fa2fc33b7448dfdf3e7c48880d +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs b/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs new file mode 100644 index 0000000..916db4a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs @@ -0,0 +1,515 @@ +using System; +using System.Collections.Generic; + +namespace FairyGUI +{ + public delegate void EventCallback0(); + public delegate void EventCallback1(EventContext context); + + /// + /// + /// + public class EventDispatcher : IEventDispatcher + { + Dictionary _dic; + + public EventDispatcher() + { + } + + /// + /// + /// + /// + /// + public void AddEventListener(string strType, EventCallback1 callback) + { + GetBridge(strType).Add(callback); + } + + /// + /// + /// + /// + /// + public void AddEventListener(string strType, EventCallback0 callback) + { + GetBridge(strType).Add(callback); + } + + /// + /// + /// + /// + /// + public void RemoveEventListener(string strType, EventCallback1 callback) + { + if (_dic == null) + return; + + EventBridge bridge = null; + if (_dic.TryGetValue(strType, out bridge)) + bridge.Remove(callback); + } + + /// + /// + /// + /// + /// + public void RemoveEventListener(string strType, EventCallback0 callback) + { + if (_dic == null) + return; + + EventBridge bridge = null; + if (_dic.TryGetValue(strType, out bridge)) + bridge.Remove(callback); + } + + /// + /// + /// + /// + /// + public void AddCapture(string strType, EventCallback1 callback) + { + GetBridge(strType).AddCapture(callback); + } + + /// + /// + /// + /// + /// + public void RemoveCapture(string strType, EventCallback1 callback) + { + if (_dic == null) + return; + + EventBridge bridge = null; + if (_dic.TryGetValue(strType, out bridge)) + bridge.RemoveCapture(callback); + } + + /// + /// + /// + public void RemoveEventListeners() + { + RemoveEventListeners(null); + } + + /// + /// + /// + /// + public void RemoveEventListeners(string strType) + { + if (_dic == null) + return; + + if (strType != null) + { + EventBridge bridge; + if (_dic.TryGetValue(strType, out bridge)) + bridge.Clear(); + } + else + { + foreach (KeyValuePair kv in _dic) + kv.Value.Clear(); + } + } + + /// + /// + /// + /// + /// + public bool hasEventListeners(string strType) + { + EventBridge bridge = TryGetEventBridge(strType); + if (bridge == null) + return false; + + return !bridge.isEmpty; + } + + /// + /// + /// + /// + /// + public bool isDispatching(string strType) + { + EventBridge bridge = TryGetEventBridge(strType); + if (bridge == null) + return false; + + return bridge._dispatching; + } + + internal EventBridge TryGetEventBridge(string strType) + { + if (_dic == null) + return null; + + EventBridge bridge = null; + _dic.TryGetValue(strType, out bridge); + return bridge; + } + + internal EventBridge GetEventBridge(string strType) + { + if (_dic == null) + _dic = new Dictionary(); + + EventBridge bridge = null; + if (!_dic.TryGetValue(strType, out bridge)) + { + bridge = new EventBridge(this); + _dic[strType] = bridge; + } + return bridge; + } + + /// + /// + /// + /// + /// + public bool DispatchEvent(string strType) + { + return DispatchEvent(strType, null); + } + + /// + /// + /// + /// + /// + /// + public bool DispatchEvent(string strType, object data) + { + return InternalDispatchEvent(strType, null, data, null); + } + + public bool DispatchEvent(string strType, object data, object initiator) + { + return InternalDispatchEvent(strType, null, data, initiator); + } + + static InputEvent sCurrentInputEvent = new InputEvent(); + + internal bool InternalDispatchEvent(string strType, EventBridge bridge, object data, object initiator) + { + if (bridge == null) + bridge = TryGetEventBridge(strType); + + EventBridge gBridge = null; + if ((this is DisplayObject) && ((DisplayObject)this).gOwner != null) + gBridge = ((DisplayObject)this).gOwner.TryGetEventBridge(strType); + + bool b1 = bridge != null && !bridge.isEmpty; + bool b2 = gBridge != null && !gBridge.isEmpty; + if (b1 || b2) + { + EventContext context = EventContext.Get(); + context.initiator = initiator != null ? initiator : this; + context.type = strType; + context.data = data; + if (data is InputEvent) + sCurrentInputEvent = (InputEvent)data; + context.inputEvent = sCurrentInputEvent; + + if (b1) + { + bridge.CallCaptureInternal(context); + bridge.CallInternal(context); + } + + if (b2) + { + gBridge.CallCaptureInternal(context); + gBridge.CallInternal(context); + } + + EventContext.Return(context); + context.initiator = null; + context.sender = null; + context.data = null; + + return context._defaultPrevented; + } + else + return false; + } + + /// + /// + /// + /// + /// + public bool DispatchEvent(EventContext context) + { + EventBridge bridge = TryGetEventBridge(context.type); + EventBridge gBridge = null; + if ((this is DisplayObject) && ((DisplayObject)this).gOwner != null) + gBridge = ((DisplayObject)this).gOwner.TryGetEventBridge(context.type); + + EventDispatcher savedSender = context.sender; + + if (bridge != null && !bridge.isEmpty) + { + bridge.CallCaptureInternal(context); + bridge.CallInternal(context); + } + + if (gBridge != null && !gBridge.isEmpty) + { + gBridge.CallCaptureInternal(context); + gBridge.CallInternal(context); + } + + context.sender = savedSender; + return context._defaultPrevented; + } + + /// + /// + /// + /// + /// + /// + /// + internal bool BubbleEvent(string strType, object data, List addChain) + { + EventContext context = EventContext.Get(); + context.initiator = this; + + context.type = strType; + context.data = data; + if (data is InputEvent) + sCurrentInputEvent = (InputEvent)data; + context.inputEvent = sCurrentInputEvent; + List bubbleChain = context.callChain; + bubbleChain.Clear(); + + GetChainBridges(strType, bubbleChain, true); + + int length = bubbleChain.Count; + for (int i = length - 1; i >= 0; i--) + { + bubbleChain[i].CallCaptureInternal(context); + if (context._touchCapture) + { + context._touchCapture = false; + if (strType == "onTouchBegin") + Stage.inst.AddTouchMonitor(context.inputEvent.touchId, bubbleChain[i].owner); + } + } + + if (!context._stopsPropagation) + { + for (int i = 0; i < length; ++i) + { + bubbleChain[i].CallInternal(context); + + if (context._touchCapture) + { + context._touchCapture = false; + if (strType == "onTouchBegin") + Stage.inst.AddTouchMonitor(context.inputEvent.touchId, bubbleChain[i].owner); + } + + if (context._stopsPropagation) + break; + } + + if (addChain != null) + { + length = addChain.Count; + for (int i = 0; i < length; ++i) + { + EventBridge bridge = addChain[i]; + if (bubbleChain.IndexOf(bridge) == -1) + { + bridge.CallCaptureInternal(context); + bridge.CallInternal(context); + } + } + } + } + + EventContext.Return(context); + context.initiator = null; + context.sender = null; + context.data = null; + return context._defaultPrevented; + } + + /// + /// + /// + /// + /// + /// + public bool BubbleEvent(string strType, object data) + { + return BubbleEvent(strType, data, null); + } + + /// + /// + /// + /// + /// + /// + public bool BroadcastEvent(string strType, object data) + { + EventContext context = EventContext.Get(); + context.initiator = this; + context.type = strType; + context.data = data; + if (data is InputEvent) + sCurrentInputEvent = (InputEvent)data; + context.inputEvent = sCurrentInputEvent; + List bubbleChain = context.callChain; + bubbleChain.Clear(); + + if (this is Container) + GetChildEventBridges(strType, (Container)this, bubbleChain); + else if (this is GComponent) + GetChildEventBridges(strType, (GComponent)this, bubbleChain); + + int length = bubbleChain.Count; + for (int i = 0; i < length; ++i) + bubbleChain[i].CallInternal(context); + + EventContext.Return(context); + context.initiator = null; + context.sender = null; + context.data = null; + return context._defaultPrevented; + } + + EventBridge GetBridge(string strType) + { + if (strType == null) + throw new Exception("event type cant be null"); + + if (_dic == null) + _dic = new Dictionary(); + + EventBridge bridge = null; + if (!_dic.TryGetValue(strType, out bridge)) + { + bridge = new EventBridge(this); + _dic[strType] = bridge; + } + + return bridge; + } + + static void GetChildEventBridges(string strType, Container container, List bridges) + { + EventBridge bridge = container.TryGetEventBridge(strType); + if (bridge != null) + bridges.Add(bridge); + if (container.gOwner != null) + { + bridge = container.gOwner.TryGetEventBridge(strType); + if (bridge != null && !bridge.isEmpty) + bridges.Add(bridge); + } + + int count = container.numChildren; + for (int i = 0; i < count; ++i) + { + DisplayObject obj = container.GetChildAt(i); + if (obj is Container) + GetChildEventBridges(strType, (Container)obj, bridges); + else + { + bridge = obj.TryGetEventBridge(strType); + if (bridge != null && !bridge.isEmpty) + bridges.Add(bridge); + + if (obj.gOwner != null) + { + bridge = obj.gOwner.TryGetEventBridge(strType); + if (bridge != null && !bridge.isEmpty) + bridges.Add(bridge); + } + } + } + } + + static void GetChildEventBridges(string strType, GComponent container, List bridges) + { + EventBridge bridge = container.TryGetEventBridge(strType); + if (bridge != null) + bridges.Add(bridge); + + int count = container.numChildren; + for (int i = 0; i < count; ++i) + { + GObject obj = container.GetChildAt(i); + if (obj is GComponent) + GetChildEventBridges(strType, (GComponent)obj, bridges); + else + { + bridge = obj.TryGetEventBridge(strType); + if (bridge != null) + bridges.Add(bridge); + } + } + } + + internal void GetChainBridges(string strType, List chain, bool bubble) + { + EventBridge bridge = TryGetEventBridge(strType); + if (bridge != null && !bridge.isEmpty) + chain.Add(bridge); + + if ((this is DisplayObject) && ((DisplayObject)this).gOwner != null) + { + bridge = ((DisplayObject)this).gOwner.TryGetEventBridge(strType); + if (bridge != null && !bridge.isEmpty) + chain.Add(bridge); + } + + if (!bubble) + return; + + if (this is DisplayObject) + { + DisplayObject element = (DisplayObject)this; + while ((element = element.parent) != null) + { + bridge = element.TryGetEventBridge(strType); + if (bridge != null && !bridge.isEmpty) + chain.Add(bridge); + + if (element.gOwner != null) + { + bridge = element.gOwner.TryGetEventBridge(strType); + if (bridge != null && !bridge.isEmpty) + chain.Add(bridge); + } + } + } + else if (this is GObject) + { + GObject element = (GObject)this; + while ((element = element.parent) != null) + { + bridge = element.TryGetEventBridge(strType); + if (bridge != null && !bridge.isEmpty) + chain.Add(bridge); + } + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs.meta new file mode 100644 index 0000000..7ba0ee8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/EventDispatcher.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7f31d18fa6488bb469504c7128522d21 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs b/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs new file mode 100644 index 0000000..4082688 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs @@ -0,0 +1,267 @@ +#if FAIRYGUI_TOLUA +using LuaInterface; +#endif + +namespace FairyGUI +{ + /// + /// + /// + public class EventListener + { + EventBridge _bridge; + string _type; + + public EventListener(EventDispatcher owner, string type) + { + _bridge = owner.GetEventBridge(type); + _type = type; + } + + /// + /// + /// + public string type + { + get { return _type; } + } + + /// + /// + /// + /// + public void AddCapture(EventCallback1 callback) + { + _bridge.AddCapture(callback); + } + + /// + /// + /// + /// + public void RemoveCapture(EventCallback1 callback) + { + _bridge.RemoveCapture(callback); + } + + /// + /// + /// + /// + public void Add(EventCallback1 callback) + { + _bridge.Add(callback); + } + + /// + /// + /// + /// + public void Remove(EventCallback1 callback) + { + _bridge.Remove(callback); + } + + /// + /// + /// + /// +#if FAIRYGUI_TOLUA + [NoToLua] +#endif + public void Add(EventCallback0 callback) + { + _bridge.Add(callback); + } + + /// + /// + /// + /// +#if FAIRYGUI_TOLUA + [NoToLua] +#endif + public void Remove(EventCallback0 callback) + { + _bridge.Remove(callback); + } + + /// + /// + /// + /// + public void Set(EventCallback1 callback) + { + _bridge.Clear(); + if (callback != null) + _bridge.Add(callback); + } + + /// + /// + /// + /// +#if FAIRYGUI_TOLUA + [NoToLua] +#endif + public void Set(EventCallback0 callback) + { + _bridge.Clear(); + if (callback != null) + _bridge.Add(callback); + } + +#if FAIRYGUI_TOLUA + /// + /// + /// + /// + /// + public void Add(LuaFunction func, LuaTable self) + { + _bridge.Add(func, self); + } + + /// + /// + /// + /// + /// + public void Add(LuaFunction func, GComponent self) + { + _bridge.Add(func, self); + } + + /// + /// + /// + /// + /// + public void Remove(LuaFunction func, LuaTable self) + { + _bridge.Remove(func, self); + } + + /// + /// + /// + /// + /// + public void Remove(LuaFunction func, GComponent self) + { + _bridge.Remove(func, self); + } + + /// + /// + /// + /// + /// + public void Set(LuaFunction func, LuaTable self) + { + _bridge.Clear(); + if (func != null) + Add(func, self); + } + + /// + /// + /// + /// + /// + public void Set(LuaFunction func, GComponent self) + { + _bridge.Clear(); + if (func != null) + Add(func, self); + } +#endif + + /// + /// + /// + public bool isEmpty + { + get + { + return !_bridge.owner.hasEventListeners(_type); + } + } + + /// + /// + /// + public bool isDispatching + { + get + { + return _bridge.owner.isDispatching(_type); + } + } + + /// + /// + /// + public void Clear() + { + _bridge.Clear(); + } + + /// + /// + /// + /// + public bool Call() + { + return _bridge.owner.InternalDispatchEvent(_type, _bridge, null, null); + } + + /// + /// + /// + /// + /// + public bool Call(object data) + { + return _bridge.owner.InternalDispatchEvent(_type, _bridge, data, null); + } + + /// + /// + /// + /// + /// + public bool BubbleCall(object data) + { + return _bridge.owner.BubbleEvent(_type, data); + } + + /// + /// + /// + /// + public bool BubbleCall() + { + return _bridge.owner.BubbleEvent(_type, null); + } + + /// + /// + /// + /// + /// + public bool BroadcastCall(object data) + { + return _bridge.owner.BroadcastEvent(_type, data); + } + + /// + /// + /// + /// + public bool BroadcastCall() + { + return _bridge.owner.BroadcastEvent(_type, null); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs.meta new file mode 100644 index 0000000..465d16d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/EventListener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8747c4706bc8c864786f691555eaa2fb +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs b/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs new file mode 100644 index 0000000..2185444 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; + +namespace FairyGUI +{ + /// + /// + /// + public interface IEventDispatcher + { + void AddEventListener(string strType, EventCallback0 callback); + void AddEventListener(string strType, EventCallback1 callback); + void RemoveEventListener(string strType, EventCallback0 callback); + void RemoveEventListener(string strType, EventCallback1 callback); + bool DispatchEvent(EventContext context); + bool DispatchEvent(string strType); + bool DispatchEvent(string strType, object data); + bool DispatchEvent(string strType, object data, object initiator); + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs.meta new file mode 100644 index 0000000..f9ebc4c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/IEventDispatcher.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a8dfc3c6bb6a91445b52cee1e916c398 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs b/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs new file mode 100644 index 0000000..6bc1a56 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs @@ -0,0 +1,175 @@ +using UnityEngine; + +#if FAIRYGUI_INPUT_SYSTEM +using UnityEngine.InputSystem; +#endif + +namespace FairyGUI +{ + /// + /// + /// + public class InputEvent + { + /// + /// x position in stage coordinates. + /// + public float x { get; internal set; } + + /// + /// y position in stage coordinates. + /// + public float y { get; internal set; } + + /// + /// + /// + public KeyCode keyCode { get; internal set; } + + /// + /// + /// + public char character { get; internal set; } + + /// + /// + /// + public EventModifiers modifiers { get; internal set; } + + /// + /// + /// + public float mouseWheelDelta { get; internal set; } + + /// + /// + /// + public int touchId { get; internal set; } + + /// + /// -1-none,0-left,1-right,2-middle + /// + public int button { get; internal set; } + + /// + /// + /// + /// + public int clickCount { get; internal set; } + + /// + /// Duraion of holding the button. You can read this in touchEnd or click event. + /// + /// + public float holdTime { get; internal set; } + + public InputEvent() + { + touchId = -1; + x = 0; + y = 0; + clickCount = 0; + keyCode = KeyCode.None; + character = '\0'; + modifiers = 0; + mouseWheelDelta = 0; + } + + /// + /// + /// + public Vector2 position + { + get { return new Vector2(x, y); } + } + + /// + /// + /// + public bool isDoubleClick + { + get { return clickCount > 1 && button == 0; } + } + + /// + /// + /// + public bool ctrlOrCmd + { + get + { + return ctrl || command; + } + } + + /// + /// + /// + public bool ctrl + { + get + { +#if FAIRYGUI_INPUT_SYSTEM + Keyboard keyboard = Keyboard.current; + return keyboard != null && (keyboard.leftCtrlKey.isPressed || keyboard.rightCtrlKey.isPressed); +#else + return Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl); +#endif + } + } + + /// + /// + /// + public bool shift + { + get + { +#if FAIRYGUI_INPUT_SYSTEM + Keyboard keyboard = Keyboard.current; + return keyboard != null && (keyboard.leftShiftKey.isPressed || keyboard.rightShiftKey.isPressed); +#else + return Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift); +#endif + } + } + + /// + /// + /// + public bool alt + { + get + { +#if FAIRYGUI_INPUT_SYSTEM + Keyboard keyboard = Keyboard.current; + return keyboard != null && (keyboard.leftAltKey.isPressed || keyboard.rightAltKey.isPressed); +#else + return Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt); +#endif + } + } + + /// + /// + /// + public bool command + { + get + { + // In win, as long as the win key and other keys are pressed at the same time, the getKey will continue to return true. So it can only be shielded. + if (Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXEditor) + { +#if FAIRYGUI_INPUT_SYSTEM + Keyboard keyboard = Keyboard.current; + return keyboard != null && (keyboard.leftCommandKey.isPressed || keyboard.rightCommandKey.isPressed); +#else + return Input.GetKey(KeyCode.LeftCommand) || Input.GetKey(KeyCode.RightCommand); +#endif + } + else + return false; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs.meta new file mode 100644 index 0000000..2a2595b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Event/InputEvent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: cc16eca0c17d9344882b6e63f26ecc9e +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions.meta new file mode 100644 index 0000000..b6de61e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ba74f03fb7064ac19ec735c621b7aec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones.meta new file mode 100644 index 0000000..1a5a896 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d9a58836214e4e58b41c998e14a4239 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs new file mode 100644 index 0000000..1e9948a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs @@ -0,0 +1,109 @@ +#if FAIRYGUI_DRAGONBONES + +using UnityEngine; +using DragonBones; + +namespace FairyGUI +{ + /// + /// + /// + public partial class GLoader3D : GObject + { + UnityArmatureComponent _armatureComponent; + + /// + /// + /// + /// + public UnityArmatureComponent armatureComponent + { + get { return _armatureComponent; } + } + + /// + /// + /// + /// + /// + /// + /// + public void SetDragonBones(DragonBonesData asset, int width, int height, Vector2 anchor) + { + if (_armatureComponent != null) + FreeDragonBones(); + + _armatureComponent = UnityFactory.factory.BuildArmatureComponent(asset.armatureNames[0], asset.name, null, asset.name); + _armatureComponent.gameObject.transform.localScale = new Vector3(100, 100, 1); + _armatureComponent.gameObject.transform.localPosition = new Vector3(anchor.x, -anchor.y, 0); + SetWrapTarget(_armatureComponent.gameObject, true, width, height); + + var ct = _armatureComponent.color; + ct.redMultiplier = _color.r; + ct.greenMultiplier = _color.g; + ct.blueMultiplier = _color.b; + _armatureComponent.color = ct; + + OnChangeDragonBones(null); + } + + protected void LoadDragonBones() + { + DragonBonesData asset = (DragonBonesData)_contentItem.skeletonAsset; + if (asset == null) + return; + + SetDragonBones(asset, _contentItem.width, _contentItem.height, _contentItem.skeletonAnchor); + } + + protected void OnChangeDragonBones(string propertyName) + { + if (_armatureComponent == null) + return; + + if (propertyName == "color") + { + var ct = _armatureComponent.color; + ct.redMultiplier = _color.r; + ct.greenMultiplier = _color.g; + ct.blueMultiplier = _color.b; + _armatureComponent.color = ct; + return; + } + + if (!string.IsNullOrEmpty(_animationName)) + { + if (_playing) + _armatureComponent.animation.Play(_animationName, _loop ? 0 : 1); + else + _armatureComponent.animation.GotoAndStopByFrame(_animationName, (uint)_frame); + } + else + _armatureComponent.animation.Reset(); + } + + protected void FreeDragonBones() + { + if (_armatureComponent != null) + { + _armatureComponent.Dispose(); + if (Application.isPlaying) + GameObject.Destroy(_armatureComponent.gameObject); + else + GameObject.DestroyImmediate(_armatureComponent.gameObject); + } + } + + protected void OnUpdateDragonBones(UpdateContext context) + { + if (_armatureComponent != null) + { + var ct = _armatureComponent.color; + ct.alphaMultiplier = context.alpha * _content.alpha; + _armatureComponent.color = ct; + } + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs.meta new file mode 100644 index 0000000..d3733a2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/DragonBones/DragonBonesLoader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d48ba38d2e2e420085e6c98407dc1fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine.meta new file mode 100644 index 0000000..56dde9b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d55093b745d3d452699bdfe7bd8ac88e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs new file mode 100644 index 0000000..0f4902e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs @@ -0,0 +1,188 @@ +#if FAIRYGUI_SPINE + +using System; +using System.Collections.Generic; +using UnityEngine; +using Spine.Unity; + +namespace FairyGUI +{ + /// + /// + /// + public partial class GLoader3D : GObject + { + public static Action CustomSpineDestroyMethod; + + SkeletonAnimation _spineAnimation; + + /// + /// + /// + /// + public SkeletonAnimation spineAnimation + { + get { return _spineAnimation; } + } + + /// + /// + /// + /// + public void SetSpine(SkeletonDataAsset asset) + { + SetSpine(asset, _contentItem.width, _contentItem.height, _contentItem.skeletonAnchor); + } + + /// + /// + /// + /// + /// + /// + /// + public void SetSpine(SkeletonDataAsset asset, int width, int height, Vector2 anchor) + { + SetSpine(asset, width, height, anchor, true); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void SetSpine(SkeletonDataAsset asset, int width, int height, Vector2 anchor, bool cloneMaterial) + { + if (_spineAnimation != null) + FreeSpine(); + + _content.customCloneMaterials = MaterialOverride; + _content.customRecoverMaterials = CleanMaterialOverride; + + _spineAnimation = SkeletonRenderer.NewSpineGameObject(asset); + _spineAnimation.gameObject.name = asset.name; + Spine.SkeletonData dat = asset.GetSkeletonData(false); + _spineAnimation.gameObject.transform.localScale = new Vector3(1 / asset.scale, 1 / asset.scale, 1); + _spineAnimation.gameObject.transform.localPosition = new Vector3(anchor.x, -anchor.y, 0); + SetWrapTarget(_spineAnimation.gameObject, cloneMaterial, width, height); + + _spineAnimation.skeleton.R = _color.r; + _spineAnimation.skeleton.G = _color.g; + _spineAnimation.skeleton.B = _color.b; + + OnChangeSpine(null); + } + + protected void LoadSpine() + { + SkeletonDataAsset asset = (SkeletonDataAsset)_contentItem.skeletonAsset; + if (asset == null) + return; + + SetSpine(asset, _contentItem.width, _contentItem.height, _contentItem.skeletonAnchor); + } + + protected void OnChangeSpine(string propertyName) + { + if (_spineAnimation == null) + return; + + if (propertyName == "color") + { + _spineAnimation.skeleton.R = _color.r; + _spineAnimation.skeleton.G = _color.g; + _spineAnimation.skeleton.B = _color.b; + return; + } + + var skeletonData = _spineAnimation.skeleton.Data; + + var state = _spineAnimation.AnimationState; + Spine.Animation animationToUse = !string.IsNullOrEmpty(_animationName) ? skeletonData.FindAnimation(_animationName) : null; + if (animationToUse != null) + { + var trackEntry = state.GetCurrent(0); + if (trackEntry == null || trackEntry.Animation.Name != _animationName || trackEntry.IsComplete && !trackEntry.Loop) + trackEntry = state.SetAnimation(0, animationToUse, _loop); + else + trackEntry.Loop = _loop; + + if (_playing) + trackEntry.TimeScale = 1; + else + { + trackEntry.TimeScale = 0; + trackEntry.TrackTime = Mathf.Lerp(0, trackEntry.AnimationEnd - trackEntry.AnimationStart, _frame / 100f); + } + } + else + state.ClearTrack(0); + + var skin = !string.IsNullOrEmpty(skinName) ? skeletonData.FindSkin(skinName) : skeletonData.DefaultSkin; + if (skin == null && skeletonData.Skins.Count > 0) + skin = skeletonData.Skins.Items[0]; + if (_spineAnimation.skeleton.Skin != skin) + { + _spineAnimation.skeleton.SetSkin(skin); + _spineAnimation.skeleton.SetSlotsToSetupPose(); + } + } + + protected void FreeSpine() + { + if (_spineAnimation != null) + { + if (CustomSpineDestroyMethod != null) + { + CustomSpineDestroyMethod(_spineAnimation); + } + else + { + if (Application.isPlaying) + GameObject.Destroy(_spineAnimation.gameObject); + else + GameObject.DestroyImmediate(_spineAnimation.gameObject); + } + + _content.customCloneMaterials = null; + _content.customRecoverMaterials = null; + } + } + + protected void OnUpdateSpine(UpdateContext context) + { + if (_spineAnimation != null) + _spineAnimation.skeleton.A = context.alpha * _content.alpha; + } + + private void MaterialOverride(Dictionary materials) + { + if (_spineAnimation != null) + { + foreach (var kv in materials) + { + _spineAnimation.CustomMaterialOverride[kv.Key] = kv.Value; + } + } + } + + private void CleanMaterialOverride() + { + if (_spineAnimation != null) + _spineAnimation.CustomMaterialOverride.Clear(); + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + CustomSpineDestroyMethod = null; + } +#endif + } +} + +#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs.meta new file mode 100644 index 0000000..006fbf1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/Spine/SpineLoader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3757a6f06ad143439bb00cd7190c6d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro.meta new file mode 100644 index 0000000..7942609 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1de100836593c444995397fa368017d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders.meta new file mode 100644 index 0000000..bad3753 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e302db5f01fdb46b5b45f44c25164846 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader new file mode 100644 index 0000000..5a91338 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader @@ -0,0 +1,478 @@ +Shader "FairyGUI/TextMeshPro/Distance Field" { + +Properties { + _FaceTex ("Face Texture", 2D) = "white" {} + _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 + _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 + _FaceColor ("Face Color", Color) = (1,1,1,1) + _FaceDilate ("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Texture", 2D) = "white" {} + _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 + _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 + _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 + _OutlineSoftness ("Outline Softness", Range(0,1)) = 0 + + _Bevel ("Bevel", Range(0,1)) = 0.5 + _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 + _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 + _BevelClamp ("Bevel Clamp", Range(0,1)) = 0 + _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 + + _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 + _SpecularColor ("Specular", Color) = (1,1,1,1) + _SpecularPower ("Specular", Range(0,4)) = 2.0 + _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 + _Diffuse ("Diffuse", Range(0,1)) = 0.5 + _Ambient ("Ambient", Range(1,0)) = 0.5 + + _BumpMap ("Normal map", 2D) = "bump" {} + _BumpOutline ("Bump Outline", Range(0,1)) = 0 + _BumpFace ("Bump Face", Range(0,1)) = 0 + + _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) + _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) + _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } + _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) + + + _UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) + _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness ("Border Softness", Range(0,1)) = 0 + + _GlowColor ("Color", Color) = (0, 1, 0, 0.5) + _GlowOffset ("Offset", Range(-1,1)) = 0 + _GlowInner ("Inner", Range(0,1)) = 0.05 + _GlowOuter ("Outer", Range(0,1)) = 0.05 + _GlowPower ("Falloff", Range(1, 0)) = 0.75 + + _WeightNormal ("Weight Normal", float) = 0 + _WeightBold ("Weight Bold", float) = 0.5 + + _ShaderFlags ("Flags", float) = 0 + _ScaleRatioA ("Scale RatioA", float) = 1 + _ScaleRatioB ("Scale RatioB", float) = 1 + _ScaleRatioC ("Scale RatioC", float) = 1 + + _MainTex ("Font Atlas", 2D) = "white" {} + _TextureWidth ("Texture Width", float) = 512 + _TextureHeight ("Texture Height", float) = 512 + _GradientScale ("Gradient Scale", float) = 5.0 + _ScaleX ("Scale X", float) = 1.0 + _ScaleY ("Scale Y", float) = 1.0 + _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness ("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX ("Vertex OffsetX", float) = 0 + _VertexOffsetY ("Vertex OffsetY", float) = 0 + + _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) + _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) + _MaskSoftnessX ("Mask SoftnessX", float) = 0 + _MaskSoftnessY ("Mask SoftnessY", float) = 0 + + _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 + + _BlendSrcFactor ("Blend SrcFactor", Float) = 1 + _BlendDstFactor ("Blend DstFactor", Float) = 10 +} + +SubShader { + + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull [_CullMode] + ZWrite Off + Lighting Off + Fog { Mode Off } + ZTest [unity_GUIZTestMode] + + Blend [_BlendSrcFactor] [_BlendDstFactor] + ColorMask [_ColorMask] + + Pass { + CGPROGRAM + #pragma target 3.0 + #pragma vertex VertShader + #pragma fragment PixShader + //#pragma shader_feature __ BEVEL_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + //#pragma shader_feature __ GLOW_ON + + //#pragma multi_compile __ UNITY_UI_CLIP_RECT + //#pragma multi_compile __ UNITY_UI_ALPHACLIP + #pragma multi_compile _ GRAYED + #pragma multi_compile _ CLIPPED SOFT_CLIPPED + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + + //begin copy + //#include "Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc" + //#include "Assets/TextMesh Pro/Shaders/TMPro.cginc" + + // UI Editable properties + uniform sampler2D _FaceTex; // Alpha : Signed Distance + uniform float _FaceUVSpeedX; + uniform float _FaceUVSpeedY; + uniform fixed4 _FaceColor; // RGBA : Color + Opacity + uniform float _FaceDilate; // v[ 0, 1] + uniform float _OutlineSoftness; // v[ 0, 1] + + uniform sampler2D _OutlineTex; // RGBA : Color + Opacity + uniform float _OutlineUVSpeedX; + uniform float _OutlineUVSpeedY; + uniform fixed4 _OutlineColor; // RGBA : Color + Opacity + uniform float _OutlineWidth; // v[ 0, 1] + + uniform float _Bevel; // v[ 0, 1] + uniform float _BevelOffset; // v[-1, 1] + uniform float _BevelWidth; // v[-1, 1] + uniform float _BevelClamp; // v[ 0, 1] + uniform float _BevelRoundness; // v[ 0, 1] + + uniform sampler2D _BumpMap; // Normal map + uniform float _BumpOutline; // v[ 0, 1] + uniform float _BumpFace; // v[ 0, 1] + + uniform samplerCUBE _Cube; // Cube / sphere map + uniform fixed4 _ReflectFaceColor; // RGB intensity + uniform fixed4 _ReflectOutlineColor; + //uniform float _EnvTiltX; // v[-1, 1] + //uniform float _EnvTiltY; // v[-1, 1] + uniform float3 _EnvMatrixRotation; + uniform float4x4 _EnvMatrix; + + uniform fixed4 _SpecularColor; // RGB intensity + uniform float _LightAngle; // v[ 0,Tau] + uniform float _SpecularPower; // v[ 0, 1] + uniform float _Reflectivity; // v[ 5, 15] + uniform float _Diffuse; // v[ 0, 1] + uniform float _Ambient; // v[ 0, 1] + + uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity + uniform float _UnderlayOffsetX; // v[-1, 1] + uniform float _UnderlayOffsetY; // v[-1, 1] + uniform float _UnderlayDilate; // v[-1, 1] + uniform float _UnderlaySoftness; // v[ 0, 1] + + uniform fixed4 _GlowColor; // RGBA : Color + Intesity + uniform float _GlowOffset; // v[-1, 1] + uniform float _GlowOuter; // v[ 0, 1] + uniform float _GlowInner; // v[ 0, 1] + uniform float _GlowPower; // v[ 1, 1/(1+4*4)] + + // API Editable properties + uniform float _ShaderFlags; + uniform float _WeightNormal; + uniform float _WeightBold; + + uniform float _ScaleRatioA; + uniform float _ScaleRatioB; + uniform float _ScaleRatioC; + + uniform float _VertexOffsetX; + uniform float _VertexOffsetY; + + //uniform float _UseClipRect; + uniform float _MaskID; + uniform sampler2D _MaskTex; + uniform float4 _MaskCoord; + uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w) + //uniform float _MaskWipeControl; + //uniform float _MaskEdgeSoftness; + //uniform fixed4 _MaskEdgeColor; + //uniform bool _MaskInverse; + + uniform float _MaskSoftnessX; + uniform float _MaskSoftnessY; + + // Font Atlas properties + uniform sampler2D _MainTex; + uniform float _TextureWidth; + uniform float _TextureHeight; + uniform float _GradientScale; + uniform float _ScaleX; + uniform float _ScaleY; + uniform float _PerspectiveFilter; + uniform float _Sharpness; + + float2 UnpackUV(float uv) + { + float2 output; + output.x = floor(uv / 4096); + output.y = uv - 4096 * output.x; + + return output * 0.001953125; + } + + fixed4 GetColor(half d, fixed4 faceColor, fixed4 outlineColor, half outline, half softness) + { + half faceAlpha = 1-saturate((d - outline * 0.5 + softness * 0.5) / (1.0 + softness)); + half outlineAlpha = saturate((d + outline * 0.5)) * sqrt(min(1.0, outline)); + + faceColor.rgb *= faceColor.a; + outlineColor.rgb *= outlineColor.a; + + faceColor = lerp(faceColor, outlineColor, outlineAlpha); + + faceColor *= faceAlpha; + + return faceColor; + } + + //end copy + + + struct vertex_t { + UNITY_VERTEX_INPUT_INSTANCE_ID + float4 position : POSITION; + float3 normal : NORMAL; + fixed4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; + }; + + + struct pixel_t { + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + float4 position : SV_POSITION; + fixed4 color : COLOR; + float2 atlas : TEXCOORD0; // Atlas + float4 param : TEXCOORD1; // alphaClip, scale, bias, weight + float2 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) + float3 viewDir : TEXCOORD3; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 texcoord2 : TEXCOORD4; // u,v, scale, bias + fixed4 underlayColor : COLOR1; + #endif + float4 textures : TEXCOORD5; + }; + + // Used by Unity internally to handle Texture Tiling and Offset. + float4 _FaceTex_ST; + float4 _OutlineTex_ST; + + CBUFFER_START(UnityPerMaterial) + #ifdef CLIPPED + float4 _ClipBox = float4(-2, -2, 0, 0); + #endif + + #ifdef SOFT_CLIPPED + float4 _ClipBox = float4(-2, -2, 0, 0); + float4 _ClipSoftness = float4(0, 0, 0, 0); + #endif + CBUFFER_END + + pixel_t VertShader(vertex_t input) + { + pixel_t output; + + UNITY_INITIALIZE_OUTPUT(pixel_t, output); + UNITY_SETUP_INSTANCE_ID(input); + UNITY_TRANSFER_INSTANCE_ID(input,output); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); + + float bold = step(input.texcoord1.y, 0); + + float4 vert = input.position; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + float4 vPosition = UnityObjectToClipPos(vert); + + float2 pixelSize = vPosition.w; + pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + float scale = rsqrt(dot(pixelSize, pixelSize)); + scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1); + if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + float bias =(.5 - weight) + (.5 / scale); + + float alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _OutlineSoftness * _ScaleRatioA); + + // #if GLOW_ON + // alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); + // #endif + + alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 underlayColor = _UnderlayColor; + underlayColor.rgb *= underlayColor.a; + + float bScale = scale; + bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); + float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; + float2 bOffset = float2(x, y); + #endif + + // Generate UV for the Masking Texture + // float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + // float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + + // Support for texture tiling and offset + float2 textureUV = UnpackUV(input.texcoord1.x); + //float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); + //float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); + + output.position = vPosition; + #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550) + output.color.rgb = GammaToLinearSpace(input.color.rgb); + output.color.a = input.color.a; + #else + output.color = input.color; + #endif + output.atlas = input.texcoord0; + output.param = float4(alphaClip, scale, bias, weight); + //output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); + output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz); + #if (UNDERLAY_ON || UNDERLAY_INNER) + output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias); + output.underlayColor = underlayColor; + #endif + //output.textures = float4(faceUV, outlineUV); + + #ifdef CLIPPED + output.mask = mul(unity_ObjectToWorld, input.position).xy * _ClipBox.zw + _ClipBox.xy; + #endif + + #ifdef SOFT_CLIPPED + output.mask = mul(unity_ObjectToWorld, input.position).xy * _ClipBox.zw + _ClipBox.xy; + #endif + + return output; + } + + + fixed4 PixShader(pixel_t input) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(input); + + float c = tex2D(_MainTex, input.atlas).a; + + #ifndef UNDERLAY_ON + clip(c - input.param.x); + #endif + + float scale = input.param.y; + float bias = input.param.z; + float weight = input.param.w; + float sd = (bias - c) * scale; + + float outline = (_OutlineWidth * _ScaleRatioA) * scale; + float softness = (_OutlineSoftness * _ScaleRatioA) * scale; + + half4 faceColor = _FaceColor; + half4 outlineColor = _OutlineColor; + + faceColor.rgb *= input.color.rgb; + + //faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); + //outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); + + faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); + + // #if BEVEL_ON + // float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); + // float3 n = GetSurfaceNormal(input.atlas, weight, dxy); + + // float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; + // bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); + // n = normalize(n- bump); + + // float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); + + // float3 col = GetSpecular(n, light); + // faceColor.rgb += col*faceColor.a; + // faceColor.rgb *= 1-(dot(n, light)*_Diffuse); + // faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); + + // fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); + // faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; + // #endif + + #if UNDERLAY_ON + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); + #endif + + #if UNDERLAY_INNER + float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; + faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); + #endif + + // #if GLOW_ON + // float4 glowColor = GetGlowColor(sd, scale); + // faceColor.rgb += glowColor.rgb * glowColor.a; + // #endif + + // Alternative implementation to UnityGet2DClipping with support for softness. + // #if UNITY_UI_CLIP_RECT + // half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); + // faceColor *= m.x * m.y; + // #endif + + // #if UNITY_UI_ALPHACLIP + // clip(faceColor.a - 0.001); + // #endif + + #ifdef GRAYED + fixed grey = dot(faceColor.rgb, fixed3(0.299, 0.587, 0.114)); + faceColor.rgb = fixed3(grey, grey, grey); + #endif + + #ifdef CLIPPED + float2 factor = abs(input.mask); + clip(1-max(factor.x, factor.y)); + #endif + + #ifdef SOFT_CLIPPED + float2 factor; + float2 condition = step(input.mask.xy, 0); + float4 clip_softness = _ClipSoftness * float4(condition, 1 - condition); + factor.xy = (1.0 - abs(input.mask.xy)) * (clip_softness.xw + clip_softness.zy); + faceColor.a *= clamp(min(factor.x, factor.y), 0.0, 1.0); + clip(faceColor.a - 0.001); + #endif + return faceColor * input.color.a; +} + + ENDCG + } +} + +//Fallback "TextMeshPro/Mobile/Distance Field" +CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader.meta new file mode 100644 index 0000000..3eee1cd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/Shaders/FairyGUI-TMP.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: de10f84640569464799f0e0bfa1ab7b0 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs new file mode 100644 index 0000000..01482ba --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs @@ -0,0 +1,807 @@ +#if FAIRYGUI_TMPRO + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.TextCore; +using TMPro; + +namespace FairyGUI +{ + /// + /// TextMeshPro text adapter for FairyGUI. Most of codes were taken from TextMeshPro! + /// Note that not all of TextMeshPro features are supported. + /// + public class TMPFont : BaseFont + { + protected TMP_FontAsset _fontAsset; + + FontStyles _style; + float _scale; + float _padding; + float _stylePadding; + float _ascent; + float _lineHeight; + float _boldMultiplier; + FontWeight _defaultFontWeight; + FontWeight _fontWeight; + TextFormat _topTextFormat; + TextFormat _format; + float _fontSizeScale; + TMP_Character _char; + NTexture[] _atlasTextures; + + float _gradientScale; + float _ratioA; + float _ratioB; + float _ratioC; + + int _formatVersion; + TMPFont _fallbackFont; + List _fallbackFonts; + VertexBuffer[] _subMeshBuffers; + bool _preparing; + + public TMPFont() + { + this.canTint = true; + this.shader = "FairyGUI/TextMeshPro/Distance Field"; + this.keepCrisp = true; + + _defaultFontWeight = FontWeight.Medium; + _fallbackFonts = new List(); + _atlasTextures = new NTexture[0]; + _subMeshBuffers = new VertexBuffer[0]; + } + + override public void Dispose() + { + Release(); + } + + public TMP_FontAsset fontAsset + { + get { return _fontAsset; } + set + { + _fontAsset = value; + Init(); + } + } + + public FontWeight fontWeight + { + get { return _defaultFontWeight; } + set { _defaultFontWeight = value; } + } + + void Release() + { + foreach (var tex in _atlasTextures) + { + if (tex != null) + tex.Dispose(); + } + } + + void Init() + { + Release(); + + mainTexture = WrapAtlasTexture(0); + + // _ascent = _fontAsset.faceInfo.ascentLine; + // _lineHeight = _fontAsset.faceInfo.lineHeight; + _ascent = _fontAsset.faceInfo.pointSize; + _lineHeight = _fontAsset.faceInfo.pointSize * 1.25f; + _gradientScale = fontAsset.atlasPadding + 1; + } + + void OnCreateNewMaterial(Material mat) + { + mat.SetFloat(ShaderUtilities.ID_TextureWidth, mainTexture.width); + mat.SetFloat(ShaderUtilities.ID_TextureHeight, mainTexture.height); + mat.SetFloat(ShaderUtilities.ID_GradientScale, _gradientScale); + mat.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + mat.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + } + + public override void Prepare(TextFormat format) + { + _preparing = true; + _topTextFormat = _format = format; + } + + static List subInstancesCopy = new List(); + public override bool BuildGraphics(NGraphics graphics) + { + _preparing = false; + _format = _topTextFormat; + + if (graphics.subInstances != null) + subInstancesCopy.AddRange(graphics.subInstances); + + UpdatePaddings(); + UpdateGraphics(graphics); + + bool changed = CreateSubGraphics(graphics, true); + + for (int i = 0; i < _fallbackFonts.Count; i++) + { + _fallbackFonts[i]._format = _format; + if (_fallbackFonts[i].CreateSubGraphics(graphics, false)) + changed = true; + } + + if (subInstancesCopy.Count > 0) + { + foreach (var g in subInstancesCopy) + { + if (g != null) + { + g.texture = null; + g.enabled = false; + } + } + subInstancesCopy.Clear(); + } + + return changed; + } + + bool CreateSubGraphics(NGraphics graphics, bool paddingsUpdated) + { + bool changed = false; + for (int i = 0; i < _atlasTextures.Length; i++) + { + var texture = _atlasTextures[i]; + if (texture == null || texture.lastActive == 0) + continue; + + texture.lastActive = 0; + + NGraphics sub = null; + if (graphics.subInstances != null) + { + int index = graphics.subInstances.FindIndex(g => g.texture == texture); + if (index == -1) + index = graphics.subInstances.FindIndex(g => g.texture == null); + if (index != -1) + { + sub = graphics.subInstances[index]; + subInstancesCopy[index] = null; + } + } + if (sub == null) + { + sub = graphics.CreateSubInstance("SubTextField"); + sub.meshFactory = new TMPFont_SubMesh(); + sub.SetShaderAndTexture(shader, texture); + graphics.subInstances.Add(sub); + changed = true; + } + else if (sub.texture != texture) + { + sub.SetShaderAndTexture(shader, texture); + sub.enabled = true; + changed = true; + } + + if (!paddingsUpdated) + { + paddingsUpdated = true; + UpdatePaddings(); + } + + UpdateGraphics(sub); + ((TMPFont_SubMesh)sub.meshFactory).font = this; + ((TMPFont_SubMesh)sub.meshFactory).atlasIndex = i; + } + + return changed; + } + + void UpdateGraphics(NGraphics graphics) + { + graphics.userData.x = _padding; + graphics.userData.y = _stylePadding; + + MaterialPropertyBlock block = graphics.materialPropertyBlock; + + block.SetFloat(ShaderUtilities.ID_ScaleRatio_A, _ratioA); + block.SetFloat(ShaderUtilities.ID_ScaleRatio_B, _ratioB); + block.SetFloat(ShaderUtilities.ID_ScaleRatio_C, _ratioC); + + block.SetFloat(ShaderUtilities.ID_FaceDilate, _format.faceDilate); + + if (_format.outline > 0) + { + graphics.ToggleKeyword("OUTLINE_ON", true); + + block.SetFloat(ShaderUtilities.ID_OutlineWidth, _format.outline); + block.SetColor(ShaderUtilities.ID_OutlineColor, _format.outlineColor); + block.SetFloat(ShaderUtilities.ID_OutlineSoftness, _format.outlineSoftness); + } + else + { + graphics.ToggleKeyword("OUTLINE_ON", false); + + block.SetFloat(ShaderUtilities.ID_OutlineWidth, 0); + block.SetFloat(ShaderUtilities.ID_OutlineSoftness, 0); + } + + if (_format.shadowOffset.x != 0 || _format.shadowOffset.y != 0) + { + graphics.ToggleKeyword("UNDERLAY_ON", true); + + block.SetColor(ShaderUtilities.ID_UnderlayColor, _format.shadowColor); + block.SetFloat(ShaderUtilities.ID_UnderlayOffsetX, _format.shadowOffset.x); + block.SetFloat(ShaderUtilities.ID_UnderlayOffsetY, -_format.shadowOffset.y); + block.SetFloat(ShaderUtilities.ID_UnderlaySoftness, _format.underlaySoftness); + } + else + { + graphics.ToggleKeyword("UNDERLAY_ON", false); + + block.SetFloat(ShaderUtilities.ID_UnderlayOffsetX, 0); + block.SetFloat(ShaderUtilities.ID_UnderlayOffsetY, 0); + block.SetFloat(ShaderUtilities.ID_UnderlaySoftness, 0); + } + } + + override public void StartDraw(NGraphics graphics) + { + _padding = graphics.userData.x; + _stylePadding = graphics.userData.y; + + if (graphics.subInstances != null) + { + foreach (var g in graphics.subInstances) + { + if (g.texture == null) + continue; + + var mesh = g.meshFactory as TMPFont_SubMesh; + if (mesh != null) + { + mesh.font._padding = g.userData.x; + mesh.font._stylePadding = g.userData.y; + mesh.font._subMeshBuffers[mesh.atlasIndex] = mesh.source = VertexBuffer.Begin(); + } + } + } + } + + NTexture WrapAtlasTexture(int index) + { + if (_atlasTextures.Length != fontAsset.atlasTextures.Length) + { + Array.Resize(ref _atlasTextures, fontAsset.atlasTextures.Length); + Array.Resize(ref _subMeshBuffers, _atlasTextures.Length); + } + + var texture = _atlasTextures[index]; + if (texture == null) + { + texture = new NTexture(_fontAsset.atlasTextures[index]); + texture.destroyMethod = DestroyMethod.None; + _atlasTextures[index] = texture; + + var manager = texture.GetMaterialManager(this.shader); + manager.onCreateNewMaterial += OnCreateNewMaterial; + } + else if (texture.nativeTexture != _fontAsset.atlasTextures[index]) + { + texture.Reload(_fontAsset.atlasTextures[index], null); + } + + return texture; + } + + override public void SetFormat(TextFormat format, float fontSizeScale) + { + _format = format; + _formatVersion++; + + _fontSizeScale = fontSizeScale; + float size = _format.size * fontSizeScale; + if (_format.specialStyle == TextFormat.SpecialStyle.Subscript || _format.specialStyle == TextFormat.SpecialStyle.Superscript) + size *= SupScale; + + _scale = size / _fontAsset.faceInfo.pointSize * _fontAsset.faceInfo.scale; + _style = FontStyles.Normal; + if (_format.bold) + { + _style |= FontStyles.Bold; + _fontWeight = FontWeight.Bold; + _boldMultiplier = 1 + _fontAsset.boldSpacing * 0.01f; + } + else + { + _fontWeight = _defaultFontWeight; + _boldMultiplier = 1.0f; + } + if (_format.italic) + _style |= FontStyles.Italic; + + _format.FillVertexColors(vertexColors); + } + + override public bool GetGlyph(char ch, out float width, out float height, out float baseline) + { + if (!GetCharacterFromFontAsset(ch, _style, _fontWeight)) + { + width = height = baseline = 0; + return false; + } + + var font = _fallbackFont ?? this; + + width = _char.glyph.metrics.horizontalAdvance * font._boldMultiplier * font._scale; + height = font._lineHeight * font._scale; + baseline = font._ascent * font._scale; + + if (_format.specialStyle == TextFormat.SpecialStyle.Subscript) + { + height /= SupScale; + baseline /= SupScale; + } + else if (_format.specialStyle == TextFormat.SpecialStyle.Superscript) + { + height = height / SupScale + baseline * SupOffset; + baseline *= (SupOffset + 1 / SupScale); + } + + height = Mathf.RoundToInt(height); + baseline = Mathf.RoundToInt(baseline); + + return true; + } + + bool GetCharacterFromFontAsset(uint unicode, FontStyles fontStyle, FontWeight fontWeight) + { + bool isAlternativeTypeface; + + // #region OLD_TMP_VERION + // TMP_FontAsset actualAsset; + // _char = TMP_FontAssetUtilities.GetCharacterFromFontAsset(unicode, _fontAsset, true, fontStyle, fontWeight, + // out isAlternativeTypeface, out actualAsset + // ); + // if (_char == null) + // return false; + // #endregion + + #region NEW_TMP_VERION + _char = TMP_FontAssetUtilities.GetCharacterFromFontAsset(unicode, _fontAsset, true, fontStyle, fontWeight, + out isAlternativeTypeface + ); + if (_char == null) + return false; + + TMP_FontAsset actualAsset = _char.textAsset as TMP_FontAsset; + #endregion + + if (actualAsset != _fontAsset) //fallback + { + if (_fallbackFont == null || _fallbackFont._fontAsset != actualAsset) + { + _fallbackFont = _fallbackFonts.Find(x => x._fontAsset == actualAsset); + if (_fallbackFont == null && _preparing) + { + _fallbackFont = new TMPFont(); + _fallbackFont.fontAsset = actualAsset; + _fallbackFonts.Add(_fallbackFont); + } + } + if (_fallbackFont != null) + { + if (_fallbackFont._formatVersion != _formatVersion) + { + _fallbackFont.SetFormat(_format, _fontSizeScale); + _fallbackFont._formatVersion = _formatVersion; + } + + _fallbackFont._char = _char; + } + } + else + _fallbackFont = null; + + if (_preparing) + { + if (_fallbackFont != null) + { + _fallbackFont.WrapAtlasTexture(_char.glyph.atlasIndex).lastActive = 1; + } + else if (_char.glyph.atlasIndex != 0) + { + WrapAtlasTexture(_char.glyph.atlasIndex).lastActive = 1; + } + } + + return true; + } + + static Vector3 bottomLeft; + static Vector3 topLeft; + static Vector3 topRight; + static Vector3 bottomRight; + + static Vector4 uvBottomLeft; + static Vector4 uvTopLeft; + static Vector4 uvTopRight; + static Vector4 uvBottomRight; + + static Vector4 uv2BottomLeft; + static Vector4 uv2TopLeft; + static Vector4 uv2TopRight; + static Vector4 uv2BottomRight; + + static Color32[] vertexColors = new Color32[4]; + + override public void DrawGlyph(VertexBuffer vb, float x, float y) + { + if (_fallbackFont != null) + { + _fallbackFont.DrawGlyph(vb, x, y); + return; + } + + vb = _subMeshBuffers[_char.glyph.atlasIndex] ?? vb; + GlyphMetrics metrics = _char.glyph.metrics; + GlyphRect rect = _char.glyph.glyphRect; + + if (_format.specialStyle == TextFormat.SpecialStyle.Subscript) + y = y - Mathf.RoundToInt(_ascent * _scale * SupOffset); + else if (_format.specialStyle == TextFormat.SpecialStyle.Superscript) + y = y + Mathf.RoundToInt(_ascent * _scale * (1 / SupScale - 1 + SupOffset)); + + topLeft.x = x + (metrics.horizontalBearingX - _padding - _stylePadding) * _scale; + topLeft.y = y + (metrics.horizontalBearingY + _padding) * _scale; + bottomRight.x = topLeft.x + (metrics.width + _padding * 2 + _stylePadding * 2) * _scale; + bottomRight.y = topLeft.y - (metrics.height + _padding * 2) * _scale; + + topRight.x = bottomRight.x; + topRight.y = topLeft.y; + bottomLeft.x = topLeft.x; + bottomLeft.y = bottomRight.y; + + #region Handle Italic & Shearing + if (((_style & FontStyles.Italic) == FontStyles.Italic)) + { + // Shift Top vertices forward by half (Shear Value * height of character) and Bottom vertices back by same amount. + float shear_value = _fontAsset.italicStyle * 0.01f; + Vector3 topShear = new Vector3(shear_value * ((metrics.horizontalBearingY + _padding + _stylePadding) * _scale), 0, 0); + Vector3 bottomShear = new Vector3(shear_value * (((metrics.horizontalBearingY - metrics.height - _padding - _stylePadding)) * _scale), 0, 0); + + topLeft += topShear; + bottomLeft += bottomShear; + topRight += topShear; + bottomRight += bottomShear; + } + #endregion Handle Italics & Shearing + + vb.vertices.Add(bottomLeft); + vb.vertices.Add(topLeft); + vb.vertices.Add(topRight); + vb.vertices.Add(bottomRight); + + float u = (rect.x - _padding - _stylePadding) / _fontAsset.atlasWidth; + float v = (rect.y - _padding - _stylePadding) / _fontAsset.atlasHeight; + float uw = rect.width > 0 ? (rect.width + _padding * 2 + _stylePadding * 2) / _fontAsset.atlasWidth : 0; + float vw = rect.height > 0 ? (rect.height + _padding * 2 + _stylePadding * 2) / _fontAsset.atlasHeight : 0; + + uvBottomLeft = new Vector2(u, v); + uvTopLeft = new Vector2(u, v + vw); + uvTopRight = new Vector2(u + uw, v + vw); + uvBottomRight = new Vector2(u + uw, v); + + float xScale = _scale * 0.01f; + if (_format.bold) + xScale *= -1; + uv2BottomLeft = new Vector2(0, xScale); + uv2TopLeft = new Vector2(511, xScale); + uv2TopRight = new Vector2(2093567, xScale); + uv2BottomRight = new Vector2(2093056, xScale); + + vb.uvs.Add(uvBottomLeft); + vb.uvs.Add(uvTopLeft); + vb.uvs.Add(uvTopRight); + vb.uvs.Add(uvBottomRight); + + vb.uvs2.Add(uv2BottomLeft); + vb.uvs2.Add(uv2TopLeft); + vb.uvs2.Add(uv2TopRight); + vb.uvs2.Add(uv2BottomRight); + + vb.colors.Add(vertexColors[0]); + vb.colors.Add(vertexColors[1]); + vb.colors.Add(vertexColors[2]); + vb.colors.Add(vertexColors[3]); + } + + override public void DrawLine(VertexBuffer vb, float x, float y, float width, int fontSize, int type) + { + if (!GetCharacterFromFontAsset('_', _style, FontWeight.Regular)) + return; + + if (_fallbackFont != null) + _fallbackFont.InternalDrawLine(vb, x, y, width, fontSize, type); + else + InternalDrawLine(vb, x, y, width, fontSize, type); + } + + void InternalDrawLine(VertexBuffer vb, float x, float y, float width, int fontSize, int type) + { + vb = _subMeshBuffers[_char.glyph.atlasIndex] ?? vb; + + float thickness; + float offset; + + if (type == 0) + { + thickness = _fontAsset.faceInfo.underlineThickness; + offset = _fontAsset.faceInfo.underlineOffset; + } + else + { + thickness = _fontAsset.faceInfo.strikethroughThickness; + offset = _fontAsset.faceInfo.strikethroughOffset; + } + + GlyphRect rect = _char.glyph.glyphRect; + float scale = (float)fontSize / _fontAsset.faceInfo.pointSize * _fontAsset.faceInfo.scale; + float segmentWidth = _char.glyph.metrics.width / 2 * scale; + width += _padding * 2; + if (width < _char.glyph.metrics.width * scale) + segmentWidth = width / 2f; + + // UNDERLINE VERTICES FOR (3) LINE SEGMENTS + #region UNDERLINE VERTICES + + thickness = thickness * scale; + if (thickness < 1) + thickness = 1; + offset = Mathf.RoundToInt(offset * scale); + + x -= _padding; + y += offset; + + // Front Part of the Underline + topLeft.x = x; + topLeft.y = y + _padding * scale; + bottomRight.x = x + segmentWidth; + bottomRight.y = y - thickness - _padding * scale; + + topRight.x = bottomRight.x; + topRight.y = topLeft.y; + bottomLeft.x = topLeft.x; + bottomLeft.y = bottomRight.y; + + vb.vertices.Add(bottomLeft); + vb.vertices.Add(topLeft); + vb.vertices.Add(topRight); + vb.vertices.Add(bottomRight); + + // Middle Part of the Underline + topLeft = topRight; + bottomLeft = bottomRight; + + topRight.x = x + width - segmentWidth; + bottomRight.x = topRight.x; + + vb.vertices.Add(bottomLeft); + vb.vertices.Add(topLeft); + vb.vertices.Add(topRight); + vb.vertices.Add(bottomRight); + + // End Part of the Underline + topLeft = topRight; + bottomLeft = bottomRight; + + topRight.x = x + width; + bottomRight.x = topRight.x; + + vb.vertices.Add(bottomLeft); + vb.vertices.Add(topLeft); + vb.vertices.Add(topRight); + vb.vertices.Add(bottomRight); + + #endregion + + // UNDERLINE UV0 + #region HANDLE UV0 + + // Calculate UV required to setup the 3 Quads for the Underline. + Vector2 uv0 = new Vector2((rect.x - _padding) / _fontAsset.atlasWidth, (rect.y - _padding) / _fontAsset.atlasHeight); // bottom left + Vector2 uv1 = new Vector2(uv0.x, (rect.y + rect.height + _padding) / _fontAsset.atlasHeight); // top left + Vector2 uv2 = new Vector2((rect.x - _padding + (float)rect.width / 2) / _fontAsset.atlasWidth, uv1.y); // Mid Top Left + Vector2 uv3 = new Vector2(uv2.x, uv0.y); // Mid Bottom Left + Vector2 uv4 = new Vector2((rect.x + _padding + (float)rect.width / 2) / _fontAsset.atlasWidth, uv1.y); // Mid Top Right + Vector2 uv5 = new Vector2(uv4.x, uv0.y); // Mid Bottom right + Vector2 uv6 = new Vector2((rect.x + _padding + rect.width) / _fontAsset.atlasWidth, uv1.y); // End Part - Bottom Right + Vector2 uv7 = new Vector2(uv6.x, uv0.y); // End Part - Top Right + + vb.uvs.Add(uv0); + vb.uvs.Add(uv1); + vb.uvs.Add(uv2); + vb.uvs.Add(uv3); + + // Middle Part of the Underline + vb.uvs.Add(new Vector2(uv2.x - uv2.x * 0.001f, uv0.y)); + vb.uvs.Add(new Vector2(uv2.x - uv2.x * 0.001f, uv1.y)); + vb.uvs.Add(new Vector2(uv2.x + uv2.x * 0.001f, uv1.y)); + vb.uvs.Add(new Vector2(uv2.x + uv2.x * 0.001f, uv0.y)); + + // Right Part of the Underline + + vb.uvs.Add(uv5); + vb.uvs.Add(uv4); + vb.uvs.Add(uv6); + vb.uvs.Add(uv7); + + #endregion + + // UNDERLINE UV2 + #region HANDLE UV2 - SDF SCALE + // UV1 contains Face / Border UV layout. + float segUv1 = segmentWidth / width; + float segUv2 = 1 - segUv1; + + //Calculate the xScale or how much the UV's are getting stretched on the X axis for the middle section of the underline. + float xScale = scale * 0.01f; + + vb.uvs2.Add(PackUV(0, 0, xScale)); + vb.uvs2.Add(PackUV(0, 1, xScale)); + vb.uvs2.Add(PackUV(segUv1, 1, xScale)); + vb.uvs2.Add(PackUV(segUv1, 0, xScale)); + + vb.uvs2.Add(PackUV(segUv1, 0, xScale)); + vb.uvs2.Add(PackUV(segUv1, 1, xScale)); + vb.uvs2.Add(PackUV(segUv2, 1, xScale)); + vb.uvs2.Add(PackUV(segUv2, 0, xScale)); + + vb.uvs2.Add(PackUV(segUv2, 0, xScale)); + vb.uvs2.Add(PackUV(segUv2, 1, xScale)); + vb.uvs2.Add(PackUV(1, 1, xScale)); + vb.uvs2.Add(PackUV(1, 0, xScale)); + + #endregion + + // UNDERLINE VERTEX COLORS + #region + // Alpha is the lower of the vertex color or tag color alpha used. + + for (int i = 0; i < 12; i++) + vb.colors.Add(vertexColors[0]); + + #endregion + } + + Vector2 PackUV(float x, float y, float xScale) + { + double x0 = (int)(x * 511); + double y0 = (int)(y * 511); + + return new Vector2((float)((x0 * 4096) + y0), xScale); + } + + override public bool HasCharacter(char ch) + { + return _fontAsset.HasCharacter(ch, true); + } + + override public int GetLineHeight(int size) + { + return Mathf.RoundToInt(_lineHeight * ((float)size / _fontAsset.faceInfo.pointSize * _fontAsset.faceInfo.scale)); + } + + void UpdatePaddings() + { + UpdateShaderRatios(); + + _padding = GetPadding(); + _stylePadding = (((_style & FontStyles.Bold) == FontStyles.Bold) ? _fontAsset.boldStyle : _fontAsset.normalStyle) + / 4.0f * _gradientScale * _ratioA; + // Clamp overall padding to Gradient Scale size. + if (_stylePadding + _padding > _gradientScale) + _padding = _gradientScale - _stylePadding; + } + + float GetPadding() + { + Vector4 padding = Vector4.zero; + Vector4 maxPadding = Vector4.zero; + + float faceDilate = _format.faceDilate * _ratioA; + float outlineSoftness = _format.outline > 0 ? _format.outlineSoftness : 0; + float faceSoftness = outlineSoftness * _ratioA; + float outlineThickness = _format.outline * _ratioA; + + float uniformPadding = outlineThickness + faceSoftness + faceDilate; + + // Underlay padding contribution + if (_format.shadowOffset.x != 0 || _format.shadowOffset.y != 0) + { + float offsetX = _format.shadowOffset.x * _ratioC; + float offsetY = -_format.shadowOffset.y * _ratioC; + float dilate = _format.faceDilate * _ratioC; + float softness = _format.underlaySoftness * _ratioC; + + padding.x = Mathf.Max(padding.x, faceDilate + dilate + softness - offsetX); + padding.y = Mathf.Max(padding.y, faceDilate + dilate + softness - offsetY); + padding.z = Mathf.Max(padding.z, faceDilate + dilate + softness + offsetX); + padding.w = Mathf.Max(padding.w, faceDilate + dilate + softness + offsetY); + } + + padding.x = Mathf.Max(padding.x, uniformPadding); + padding.y = Mathf.Max(padding.y, uniformPadding); + padding.z = Mathf.Max(padding.z, uniformPadding); + padding.w = Mathf.Max(padding.w, uniformPadding); + + padding.x = Mathf.Min(padding.x, 1); + padding.y = Mathf.Min(padding.y, 1); + padding.z = Mathf.Min(padding.z, 1); + padding.w = Mathf.Min(padding.w, 1); + + maxPadding.x = maxPadding.x < padding.x ? padding.x : maxPadding.x; + maxPadding.y = maxPadding.y < padding.y ? padding.y : maxPadding.y; + maxPadding.z = maxPadding.z < padding.z ? padding.z : maxPadding.z; + maxPadding.w = maxPadding.w < padding.w ? padding.w : maxPadding.w; + + padding *= _gradientScale; + + // Set UniformPadding to the maximum value of any of its components. + uniformPadding = Mathf.Max(padding.x, padding.y); + uniformPadding = Mathf.Max(padding.z, uniformPadding); + uniformPadding = Mathf.Max(padding.w, uniformPadding); + + return uniformPadding + 1.25f; + } + + // Scale Ratios to ensure property ranges are optimum in Material Editor + void UpdateShaderRatios() + { + _ratioA = _ratioB = _ratioC = 1; + + float clamp = 1; + + float weight = Mathf.Max(fontAsset.normalStyle, fontAsset.boldStyle) / 4.0f; + float range = (weight + _format.faceDilate) * (_gradientScale - clamp); + + // Compute Ratio A + float outlineSoftness = _format.outline > 0 ? _format.outlineSoftness : 0; + float t = Mathf.Max(1, weight + _format.faceDilate + _format.outline + outlineSoftness); + _ratioA = (_gradientScale - clamp) / (_gradientScale * t); + + // Compute Ratio B + // no glow support yet + + // Compute Ratio C + if (_format.shadowOffset.x != 0 || _format.shadowOffset.y != 0) + { + t = Mathf.Max(1, Mathf.Max(Mathf.Abs(_format.shadowOffset.x), Mathf.Abs(-_format.shadowOffset.y)) + _format.faceDilate + _format.underlaySoftness); + _ratioC = Mathf.Max(0, _gradientScale - clamp - range) / (_gradientScale * t); + } + } + } + + class TMPFont_SubMesh : IMeshFactory + { + public TMPFont font; + public int atlasIndex; + public VertexBuffer source; + + public void OnPopulateMesh(VertexBuffer vb) + { + if (source != null) + { + vb.Append(source); + vb.AddTriangles(); + source = null; + } + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs.meta new file mode 100644 index 0000000..f816457 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPFont.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7b7ade279883464288671135d22476f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs new file mode 100644 index 0000000..89758dc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs @@ -0,0 +1,16 @@ +#if FAIRYGUI_TMPRO + +namespace FairyGUI +{ + /// + /// + /// + public partial class TextFormat + { + public float faceDilate; + public float outlineSoftness; + public float underlaySoftness; + } +} + +#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs.meta new file mode 100644 index 0000000..5a9b378 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/TextMeshPro/TMPTextFormat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6dd33b417fbb245f887d32166c8acc1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput.meta new file mode 100644 index 0000000..a277c71 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75af914f7d92f454d9c7719275cf401c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs new file mode 100644 index 0000000..a00ed1e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs @@ -0,0 +1,77 @@ +#if UNITY_WEBGL && FAIRYGUI_WEBGL_TEXT_INPUT + +using System; +using System.Runtime.InteropServices; +using AOT; +using FairyGUI; +using UnityEngine; + +public static class WebGLTextInput +{ + static WebGLTextInput() + { + WebGLTextInputInit(OnInput, OnBlur); + } + + public static void Start(InputTextField target) + { + WebGLTextInputSetText(target.text, + !target.textField.singleLine, + ColorUtility.ToHtmlStringRGBA(target.textFormat.color), + target.textFormat.size, + target.textFormat.font, + target.maxLength); + + WebGLInput.captureAllKeyboardInput = false; + + SyncTransform(target); + } + + public static void Stop() + { + WebGLTextInputHide(); + } + + public static void SyncTransform(InputTextField target) + { + Rect rect = target.TransformRect(new Rect(0, 0, target.width, target.height), null); + rect.min = StageCamera.main.WorldToScreenPoint(rect.min); + rect.max = StageCamera.main.WorldToScreenPoint(rect.max); + rect.y = Screen.height - rect.y - rect.height; + + WebGLTextInputShow(rect.x, rect.y, target.width, target.height, + rect.width / target.width, rect.height / target.height); + } + + [MonoPInvokeCallback(typeof(Action))] + static void OnInput(string value) + { + var focus = Stage.inst.focus as InputTextField; + if (focus != null) + focus.ReplaceText(value); + } + + [MonoPInvokeCallback(typeof(Action))] + static void OnBlur() + { + WebGLInput.captureAllKeyboardInput = true; + + var focus = Stage.inst.focus as InputTextField; + if (focus != null) + Stage.inst.SetFocus(null, true); + } + + [DllImport("__Internal")] + public static extern void WebGLTextInputInit(Action onInputCallback, Action onBlurCallback); + + [DllImport("__Internal")] + public static extern void WebGLTextInputSetText(string text, bool multiline, string color, int fontSize, string fontFace, int maxLength); + + [DllImport("__Internal")] + public static extern void WebGLTextInputShow(float x, float y, float width, float height, float scaleX, float scaleY); + + [DllImport("__Internal")] + public static extern void WebGLTextInputHide(); +} + +#endif \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs.meta new file mode 100644 index 0000000..2a276ad --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13531b8bb4ecf47a995ffa3e9c54ab0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib new file mode 100644 index 0000000..a22e316 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib @@ -0,0 +1,107 @@ +var WebGLTextInput = { + $canvasEle: null, + $containerEle: null, + $inputEle: null, + $textareaEle: null, + $callbacks: null, + + WebGLTextInputInit: function (onInputCallback, onBlurCallback) { + callbacks = { onInputCallback: onInputCallback, onBlurCallback: onBlurCallback }; + canvasEle = document.getElementById('unity-canvas'); + }, + + WebGLTextInputSetText: function (text, multiline, color, fontSize, fontFace, maxLength) { + if (containerEle == null) { + InitInput(inputEle = document.createElement("input")); + InitInput(textareaEle = document.createElement("textarea")); + + containerEle = document.createElement("div"); + containerEle.style.cssText = "transform-origin:0 0;-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-o-transform-origin:0 0;"; + containerEle.style.position = "absolute"; + containerEle.style.zIndex = '1E5'; + containerEle.name = "WebGLTextInput"; + canvasEle.parentElement.appendChild(containerEle); + } + + inputEle.parentElement && (containerEle.removeChild(inputEle)); + textareaEle.parentElement && (containerEle.removeChild(textareaEle)); + + var current = multiline ? textareaEle : inputEle; + containerEle.appendChild(current); + containerEle.style.display = ""; + + current.maxLength = maxLength <= 0 ? 1E5 : maxLength; + current.value = UTF8ToString(text); + current.style.color = color; + current.style.fontSize = fontSize + 'px'; + current.style.fontFamily = fontFace; + current.focus(); + }, + + WebGLTextInputShow: function (x, y, width, height, scaleX, scaleY) { + containerEle.style.top = y + "px"; + containerEle.style.left = x + "px"; + containerEle.style.width = width + "px"; + containerEle.style.height = height + "px"; + containerEle.style.transform = "scale(" + scaleX + "," + scaleY + ")"; + }, + + WebGLTextInputHide: function () { + containerEle.style.display = "none"; + }, + + + $InitInput: function (input) { + var style = input.style; + style.position = "absolute"; + style.width = "100%"; + style.height = "100%"; + style.overflow = "hidden"; + style.resize = 'none'; + style.backgroundColor = 'transparent'; + style.border = 'none'; + style.outline = 'none'; + + var t = callbacks; + input.addEventListener('input', function () { + var returnStr = input.value; + var bufferSize = lengthBytesUTF8(returnStr) + 1; + var buffer = _malloc(bufferSize); + stringToUTF8(returnStr, buffer, bufferSize); + dynCall("vi", t.onInputCallback, [buffer]); + }); + + input.addEventListener('blur', function () { + if (input.parentElement) + input.parentElement.style.display = "none"; + dynCall("v", t.onBlurCallback); + }); + + if (input.tagName == "INPUT") { + input.addEventListener('keydown', function (e) { + if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) { + e.preventDefault(); + input.blur(); + } + }); + } + + var stopEvent = function (e) { + if (e.type == 'touchmove') + e.preventDefault(); + e.stopPropagation && e.stopPropagation(); + } + + input.addEventListener('mousemove', stopEvent, { passive: false }); + input.addEventListener('mousedown', stopEvent, { passive: false }); + input.addEventListener('touchmove', stopEvent, { passive: false }); + }, +}; + +autoAddDeps(WebGLTextInput, '$canvasEle'); +autoAddDeps(WebGLTextInput, '$containerEle'); +autoAddDeps(WebGLTextInput, '$inputEle'); +autoAddDeps(WebGLTextInput, '$textareaEle'); +autoAddDeps(WebGLTextInput, "$callbacks"); +autoAddDeps(WebGLTextInput, '$InitInput'); +mergeInto(LibraryManager.library, WebGLTextInput); \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib.meta b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib.meta new file mode 100644 index 0000000..9fff117 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Extensions/WebGLTextInput/WebGLTextInput.jslib.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 3613e6a08c3e07c47937410768813692 +timeCreated: 1565948029 +licenseType: Pro +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Facebook: WebGL + second: + enabled: 1 + settings: {} + - first: + WebGL: WebGL + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef b/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef new file mode 100644 index 0000000..a2a73d7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef @@ -0,0 +1,16 @@ +{ + "name": "FairyGUI", + "rootNamespace": "", + "references": [ + "Unity.TextMeshPro" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef.meta b/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef.meta new file mode 100644 index 0000000..295eb12 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/FairyGUI.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8c8f9d96103e94a7da84b012fd7e9f13 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter.meta b/Assets/Plugins/FairyGUI/Scripts/Filter.meta new file mode 100644 index 0000000..1f7a0c7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Filter.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 433dd68fcd8eedd489b1c789a3bdd726 +folderAsset: yes +timeCreated: 1464768258 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs b/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs new file mode 100644 index 0000000..b1c1ae2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class BlurFilter : IFilter + { + //ref http://blog.csdn.net/u011047171/article/details/47947397 + + /// + /// + /// + public float blurSize; + + DisplayObject _target; + Material _blitMaterial; + + public BlurFilter() + { + blurSize = 1f; + } + + public DisplayObject target + { + get { return _target; } + set + { + _target = value; + _target.EnterPaintingMode(1, null); + _target.onPaint += OnRenderImage; + + _blitMaterial = new Material(ShaderConfig.GetShader("FairyGUI/BlurFilter")); + _blitMaterial.hideFlags = DisplayObject.hideFlags; + } + } + + public void Dispose() + { + _target.LeavePaintingMode(1); + _target.onPaint -= OnRenderImage; + _target = null; + + if (Application.isPlaying) + Material.Destroy(_blitMaterial); + else + Material.DestroyImmediate(_blitMaterial); + } + + public void Update() + { + } + + void FourTapCone(RenderTexture source, RenderTexture dest, int iteration) + { + float off = blurSize * iteration + 0.5f; + Graphics.BlitMultiTap(source, dest, _blitMaterial, + new Vector2(-off, -off), + new Vector2(-off, off), + new Vector2(off, off), + new Vector2(off, -off) + ); + } + + void DownSample4x(RenderTexture source, RenderTexture dest) + { + float off = 1.0f; + Graphics.BlitMultiTap(source, dest, _blitMaterial, + new Vector2(off, off), + new Vector2(-off, off), + new Vector2(off, off), + new Vector2(off, -off) + ); + } + + void OnRenderImage() + { + if (blurSize < 0.01) + return; + + RenderTexture sourceTexture = (RenderTexture)_target.paintingGraphics.texture.nativeTexture; + int rtW = sourceTexture.width / 8; + int rtH = sourceTexture.height / 8; + RenderTexture buffer = RenderTexture.GetTemporary(rtW, rtH, 0); + + DownSample4x(sourceTexture, buffer); + + for (int i = 0; i < 2; i++) + { + RenderTexture buffer2 = RenderTexture.GetTemporary(rtW, rtH, 0); + FourTapCone(buffer, buffer2, i); + RenderTexture.ReleaseTemporary(buffer); + buffer = buffer2; + } + Graphics.Blit(buffer, sourceTexture); + + RenderTexture.ReleaseTemporary(buffer); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs.meta new file mode 100644 index 0000000..2e9a0f4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Filter/BlurFilter.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 93a10729ff0ced14c97c9ae9d4771c4c +timeCreated: 1464768262 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs b/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs new file mode 100644 index 0000000..c48bf2e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs @@ -0,0 +1,238 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class ColorFilter : IFilter + { + // Most of the color transformation math was taken from the excellent ColorMatrixFilter class in Starling Framework + + DisplayObject _target; + float[] _matrix; + + const float LUMA_R = 0.299f; + const float LUMA_G = 0.587f; + const float LUMA_B = 0.114f; + + static float[] IDENTITY = new float[] { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 }; + static float[] tmp = new float[20]; + + public ColorFilter() + { + _matrix = new float[20]; + Array.Copy(IDENTITY, _matrix, _matrix.Length); + } + + public DisplayObject target + { + get { return _target; } + set + { + _target = value; + + //这里做一个优化,如果对象是图片或者动画,则通过直接修改目标的材质完成滤镜功能 + if ((_target is Image) || (_target is MovieClip)) + _target.graphics.ToggleKeyword("COLOR_FILTER", true); + else //否则通过绘画模式,需要建立一张RT,所以会有一定消耗 + { + _target.EnterPaintingMode(1, null); + _target.paintingGraphics.ToggleKeyword("COLOR_FILTER", true); + } + + UpdateMatrix(); + } + } + + public void Dispose() + { + if (!_target.isDisposed) + { + if ((_target is Image) || (_target is MovieClip)) + _target.graphics.ToggleKeyword("COLOR_FILTER", false); + else + { + _target.paintingGraphics.ToggleKeyword("COLOR_FILTER", false); + _target.LeavePaintingMode(1); + } + } + + _target = null; + } + + public void Update() + { + } + + public void Invert() + { + _ConcatValues(0, -1, 0, 0, 0, 1); + _ConcatValues(1, 0, -1, 0, 0, 1); + _ConcatValues(2, 0, 0, -1, 0, 1); + _ConcatValues(3, 0, 0, 0, 1, 0); + } + + /// + /// Changes the saturation. Typical values are in the range (-1, 1). + /// Values above zero will raise, values below zero will reduce the saturation. + /// '-1' will produce a grayscale image. + /// + /// + public void AdjustSaturation(float sat) + { + sat += 1; + + float invSat = 1 - sat; + float invLumR = invSat * LUMA_R; + float invLumG = invSat * LUMA_G; + float invLumB = invSat * LUMA_B; + + _ConcatValues(0, (invLumR + sat), invLumG, invLumB, 0, 0); + _ConcatValues(1, invLumR, (invLumG + sat), invLumB, 0, 0); + _ConcatValues(2, invLumR, invLumG, (invLumB + sat), 0, 0); + _ConcatValues(3, 0, 0, 0, 1, 0); + } + + /// + /// Changes the contrast. Typical values are in the range (-1, 1). + /// Values above zero will raise, values below zero will reduce the contrast. + /// + /// + public void AdjustContrast(float value) + { + float s = value + 1; + float o = 128f / 255 * (1 - s); + + _ConcatValues(0, s, 0, 0, 0, o); + _ConcatValues(1, 0, s, 0, 0, o); + _ConcatValues(2, 0, 0, s, 0, o); + _ConcatValues(3, 0, 0, 0, 1, 0); + } + + /// + /// Changes the brightness. Typical values are in the range (-1, 1). + /// Values above zero will make the image brighter, values below zero will make it darker. + /// + /// + public void AdjustBrightness(float value) + { + _ConcatValues(0, 1, 0, 0, 0, value); + _ConcatValues(1, 0, 1, 0, 0, value); + _ConcatValues(2, 0, 0, 1, 0, value); + _ConcatValues(3, 0, 0, 0, 1, 0); + } + + /// + ///Changes the hue of the image. Typical values are in the range (-1, 1). + /// + /// + public void AdjustHue(float value) + { + value *= Mathf.PI; + + float cos = Mathf.Cos(value); + float sin = Mathf.Sin(value); + + _ConcatValues(0, ((LUMA_R + (cos * (1 - LUMA_R))) + (sin * -(LUMA_R))), ((LUMA_G + (cos * -(LUMA_G))) + (sin * -(LUMA_G))), ((LUMA_B + (cos * -(LUMA_B))) + (sin * (1 - LUMA_B))), 0, 0); + _ConcatValues(1, ((LUMA_R + (cos * -(LUMA_R))) + (sin * 0.143f)), ((LUMA_G + (cos * (1 - LUMA_G))) + (sin * 0.14f)), ((LUMA_B + (cos * -(LUMA_B))) + (sin * -0.283f)), 0, 0); + _ConcatValues(2, ((LUMA_R + (cos * -(LUMA_R))) + (sin * -((1 - LUMA_R)))), ((LUMA_G + (cos * -(LUMA_G))) + (sin * LUMA_G)), ((LUMA_B + (cos * (1 - LUMA_B))) + (sin * LUMA_B)), 0, 0); + _ConcatValues(3, 0, 0, 0, 1, 0); + } + + /// + /// Tints the image in a certain color, analog to what can be done in Adobe Animate. + /// + /// the RGB color with which the image should be tinted. + /// the intensity with which tinting should be applied. Range (0, 1). + public void Tint(Color color, float amount = 1.0f) + { + float q = 1 - amount; + + float rA = amount * color.r; + float gA = amount * color.g; + float bA = amount * color.b; + + _ConcatValues(0, q + rA * LUMA_R, rA * LUMA_G, rA * LUMA_B, 0, 0); + _ConcatValues(1, gA * LUMA_R, q + gA * LUMA_G, gA * LUMA_B, 0, 0); + _ConcatValues(2, bA * LUMA_R, bA * LUMA_G, q + bA * LUMA_B, 0, 0); + _ConcatValues(3, 0, 0, 0, 1, 0); + } + + /// + /// Changes the filter matrix back to the identity matrix + /// + public void Reset() + { + Array.Copy(IDENTITY, _matrix, _matrix.Length); + + UpdateMatrix(); + } + + void _ConcatValues(int index, float f0, float f1, float f2, float f3, float f4) + { + int i = index * 5; + for (int x = 0; x < 5; ++x) + { + tmp[i + x] = f0 * _matrix[x] + f1 * _matrix[x + 5] + f2 * _matrix[x + 10] + f3 * _matrix[x + 15] + (x == 4 ? f4 : 0); + } + + if (index == 3) + { + Array.Copy(tmp, _matrix, tmp.Length); + + UpdateMatrix(); + } + } + + /// + /// + /// + /// + public void ConcatValues(params float[] values) + { + int i = 0; + + for (int y = 0; y < 4; ++y) + { + for (int x = 0; x < 5; ++x) + { + tmp[i + x] = values[i] * _matrix[x] + + values[i + 1] * _matrix[x + 5] + + values[i + 2] * _matrix[x + 10] + + values[i + 3] * _matrix[x + 15] + + (x == 4 ? values[i + 4] : 0); + } + i += 5; + } + Array.Copy(tmp, _matrix, tmp.Length); + + UpdateMatrix(); + } + + void UpdateMatrix() + { + if (_target == null) + return; + + Matrix4x4 matrix = new Matrix4x4(); + matrix.SetRow(0, new Vector4(_matrix[0], _matrix[1], _matrix[2], _matrix[3])); + matrix.SetRow(1, new Vector4(_matrix[5], _matrix[6], _matrix[7], _matrix[8])); + matrix.SetRow(2, new Vector4(_matrix[10], _matrix[11], _matrix[12], _matrix[13])); + matrix.SetRow(3, new Vector4(_matrix[15], _matrix[16], _matrix[17], _matrix[18])); + + Vector4 offset = new Vector4(_matrix[4], _matrix[9], _matrix[14], _matrix[19]); + + MaterialPropertyBlock block; + if ((_target is Image) || (_target is MovieClip)) + block = _target.graphics.materialPropertyBlock; + else + block = _target.paintingGraphics.materialPropertyBlock; + + block.SetMatrix(ShaderConfig.ID_ColorMatrix, matrix); + block.SetVector(ShaderConfig.ID_ColorOffset, offset); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs.meta new file mode 100644 index 0000000..31a8376 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Filter/ColorFilter.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f03204401ceeb6d4dad6b55e0889c0ae +timeCreated: 1464768266 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs b/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs new file mode 100644 index 0000000..f4a6392 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + public interface IFilter + { + /// + /// + /// + DisplayObject target { get; set; } + + /// + /// + /// + void Update(); + + /// + /// + /// + void Dispose(); + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs.meta new file mode 100644 index 0000000..289ed4e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Filter/IFilter.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5c508023e115ed34a94f92161160ef24 +timeCreated: 1464768262 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture.meta new file mode 100644 index 0000000..3982f1c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Gesture.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1208c6212379851499f0b304870357dd +folderAsset: yes +timeCreated: 1464244762 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs b/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs new file mode 100644 index 0000000..15edb4b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// 长按手势。当按下一定时间后(duration),派发onAction,如果once为false,则间隔duration时间持续派发onAction,直到手指释放。 + /// + public class LongPressGesture : EventDispatcher + { + /// + /// + /// + public GObject host { get; private set; } + + /// + /// 当手指按下时派发该事件。 + /// + public EventListener onBegin { get; private set; } + /// + /// 手指离开屏幕时派发该事件。 + /// + public EventListener onEnd { get; private set; } + /// + /// 当手指按下后一段时间后派发该事件。并且在手指离开前按一定周期派发该事件。 + /// + public EventListener onAction { get; private set; } + + /// + /// 第一次派发事件的触发时间。单位秒 + /// + public float trigger; + + /// + /// 派发onAction事件的时间间隔。单位秒。 + /// + public float interval; + + /// + /// 如果为真,则onAction再一次按下释放过程只派发一次。如果为假,则每隔duration时间派发一次。 + /// + public bool once; + + /// + /// 手指按住后,移动超出此半径范围则手势停止。 + /// + public int holdRangeRadius; + + Vector2 _startPoint; + bool _started; + int _touchId; + + public static float TRIGGER = 1.5f; + public static float INTERVAL = 1f; + + public LongPressGesture(GObject host) + { + this.host = host; + trigger = TRIGGER; + interval = INTERVAL; + holdRangeRadius = 50; + Enable(true); + + onBegin = new EventListener(this, "onLongPressBegin"); + onEnd = new EventListener(this, "onLongPressEnd"); + onAction = new EventListener(this, "onLongPressAction"); + } + + public void Dispose() + { + Enable(false); + host = null; + } + + public void Enable(bool value) + { + if (value) + { + if (host == GRoot.inst) + { + Stage.inst.onTouchBegin.Add(__touchBegin); + Stage.inst.onTouchEnd.Add(__touchEnd); + } + else + { + host.onTouchBegin.Add(__touchBegin); + host.onTouchEnd.Add(__touchEnd); + } + } + else + { + if (host == GRoot.inst) + { + Stage.inst.onTouchBegin.Remove(__touchBegin); + Stage.inst.onTouchEnd.Remove(__touchEnd); + } + else + { + host.onTouchBegin.Remove(__touchBegin); + host.onTouchEnd.Remove(__touchEnd); + } + Timers.inst.Remove(__timer); + } + } + + public void Cancel() + { + Timers.inst.Remove(__timer); + _started = false; + } + + void __touchBegin(EventContext context) + { + InputEvent evt = context.inputEvent; + _startPoint = host.GlobalToLocal(new Vector2(evt.x, evt.y)); + _started = false; + _touchId = evt.touchId; + + Timers.inst.Add(trigger, 1, __timer); + context.CaptureTouch(); + } + + void __timer(object param) + { + Vector2 pt = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touchId)); + if (Mathf.Pow(pt.x - _startPoint.x, 2) + Mathf.Pow(pt.y - _startPoint.y, 2) > Mathf.Pow(holdRangeRadius, 2)) + { + Timers.inst.Remove(__timer); + return; + } + if (!_started) + { + _started = true; + onBegin.Call(); + + if (!once) + Timers.inst.Add(interval, 0, __timer); + } + + onAction.Call(); + } + + void __touchEnd(EventContext context) + { + Timers.inst.Remove(__timer); + + if (_started) + { + _started = false; + onEnd.Call(); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs.meta new file mode 100644 index 0000000..e35b0e1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Gesture/LongPressGesture.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 036b702098f47c24ea9cda6c2948507d +timeCreated: 1464244762 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs b/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs new file mode 100644 index 0000000..53cddc9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs @@ -0,0 +1,156 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// 两个指头捏或者放的手势。 + /// + public class PinchGesture : EventDispatcher + { + /// + /// + /// + public GObject host { get; private set; } + + /// + /// 当两个手指开始呈捏手势时派发该事件。 + /// + public EventListener onBegin { get; private set; } + /// + /// 当其中一个手指离开屏幕时派发该事件。 + /// + public EventListener onEnd { get; private set; } + /// + /// 当手势动作时派发该事件。 + /// + public EventListener onAction { get; private set; } + + /// + /// 总共缩放的量。 + /// + public float scale; + + /// + /// 从上次通知后的改变量。 + /// + public float delta; + + float _startDistance; + float _lastScale; + int[] _touches; + bool _started; + bool _touchBegan; + + public PinchGesture(GObject host) + { + this.host = host; + Enable(true); + + _touches = new int[2]; + + onBegin = new EventListener(this, "onPinchBegin"); + onEnd = new EventListener(this, "onPinchEnd"); + onAction = new EventListener(this, "onPinchAction"); + } + + public void Dispose() + { + Enable(false); + host = null; + } + + public void Enable(bool value) + { + if (value) + { + if (host == GRoot.inst) + { + Stage.inst.onTouchBegin.Add(__touchBegin); + Stage.inst.onTouchMove.Add(__touchMove); + Stage.inst.onTouchEnd.Add(__touchEnd); + } + else + { + host.onTouchBegin.Add(__touchBegin); + host.onTouchMove.Add(__touchMove); + host.onTouchEnd.Add(__touchEnd); + } + } + else + { + _started = false; + _touchBegan = false; + if (host == GRoot.inst) + { + Stage.inst.onTouchBegin.Remove(__touchBegin); + Stage.inst.onTouchMove.Remove(__touchMove); + Stage.inst.onTouchEnd.Remove(__touchEnd); + } + else + { + host.onTouchBegin.Remove(__touchBegin); + host.onTouchMove.Remove(__touchMove); + host.onTouchEnd.Remove(__touchEnd); + } + } + } + + void __touchBegin(EventContext context) + { + if (Stage.inst.touchCount == 2) + { + if (!_started && !_touchBegan) + { + _touchBegan = true; + Stage.inst.GetAllTouch(_touches); + Vector2 pt1 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[0])); + Vector2 pt2 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[1])); + _startDistance = Vector2.Distance(pt1, pt2); + + context.CaptureTouch(); + } + } + } + + void __touchMove(EventContext context) + { + if (!_touchBegan || Stage.inst.touchCount != 2) + return; + + InputEvent evt = context.inputEvent; + Vector2 pt1 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[0])); + Vector2 pt2 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[1])); + float dist = Vector2.Distance(pt1, pt2); + + if (!_started && Mathf.Abs(dist - _startDistance) > UIConfig.touchDragSensitivity) + { + _started = true; + scale = 1; + _lastScale = 1; + + onBegin.Call(evt); + } + + if (_started) + { + float ss = dist / _startDistance; + delta = ss - _lastScale; + _lastScale = ss; + this.scale += delta; + onAction.Call(evt); + } + } + + void __touchEnd(EventContext context) + { + _touchBegan = false; + if (_started) + { + _started = false; + onEnd.Call(context.inputEvent); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs.meta new file mode 100644 index 0000000..969c086 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Gesture/PinchGesture.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: dc85a819551042448a16308b82054c89 +timeCreated: 1464244766 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs b/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs new file mode 100644 index 0000000..173fe14 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// 手指反向操作的手势。 + /// + public class RotationGesture : EventDispatcher + { + /// + /// + /// + public GObject host { get; private set; } + + /// + /// 当两个手指开始呈反向操作时派发该事件。 + /// + public EventListener onBegin { get; private set; } + /// + /// 当其中一个手指离开屏幕时派发该事件。 + /// + public EventListener onEnd { get; private set; } + /// + /// 当手势动作时派发该事件。 + /// + public EventListener onAction { get; private set; } + + /// + /// 总共旋转的角度。 + /// + public float rotation; + + /// + /// 从上次通知后的改变量。 + /// + public float delta; + + /// + /// 是否把变化量强制为整数。默认true。 + /// + public bool snapping; + + Vector2 _startVector; + float _lastRotation; + int[] _touches; + bool _started; + bool _touchBegan; + + public RotationGesture(GObject host) + { + this.host = host; + Enable(true); + + _touches = new int[2]; + snapping = true; + + onBegin = new EventListener(this, "onRotationBegin"); + onEnd = new EventListener(this, "onRotationEnd"); + onAction = new EventListener(this, "onRotationAction"); + } + + public void Dispose() + { + Enable(false); + host = null; + } + + public void Enable(bool value) + { + if (value) + { + if (host == GRoot.inst) + { + Stage.inst.onTouchBegin.Add(__touchBegin); + Stage.inst.onTouchMove.Add(__touchMove); + Stage.inst.onTouchEnd.Add(__touchEnd); + } + else + { + host.onTouchBegin.Add(__touchBegin); + host.onTouchMove.Add(__touchMove); + host.onTouchEnd.Add(__touchEnd); + } + } + else + { + _started = false; + _touchBegan = false; + if (host == GRoot.inst) + { + Stage.inst.onTouchBegin.Remove(__touchBegin); + Stage.inst.onTouchMove.Remove(__touchMove); + Stage.inst.onTouchEnd.Remove(__touchEnd); + } + else + { + host.onTouchBegin.Remove(__touchBegin); + host.onTouchMove.Remove(__touchMove); + host.onTouchEnd.Remove(__touchEnd); + } + } + } + + void __touchBegin(EventContext context) + { + if (Stage.inst.touchCount == 2) + { + if (!_started && !_touchBegan) + { + _touchBegan = true; + Stage.inst.GetAllTouch(_touches); + Vector2 pt1 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[0])); + Vector2 pt2 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[1])); + _startVector = pt1 - pt2; + + context.CaptureTouch(); + } + } + } + + void __touchMove(EventContext context) + { + if (!_touchBegan || Stage.inst.touchCount != 2) + return; + + InputEvent evt = context.inputEvent; + Vector2 pt1 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[0])); + Vector2 pt2 = host.GlobalToLocal(Stage.inst.GetTouchPosition(_touches[1])); + Vector2 vec = pt1 - pt2; + + float rot = Mathf.Rad2Deg * ((Mathf.Atan2(vec.y, vec.x) - Mathf.Atan2(_startVector.y, _startVector.x))); + if (snapping) + { + rot = Mathf.Round(rot); + if (rot == 0) + return; + } + + if (!_started && rot > 5) + { + _started = true; + rotation = 0; + _lastRotation = 0; + + onBegin.Call(evt); + } + + if (_started) + { + delta = rot - _lastRotation; + _lastRotation = rot; + this.rotation += delta; + onAction.Call(evt); + } + } + + void __touchEnd(EventContext context) + { + _touchBegan = false; + if (_started) + { + _started = false; + onEnd.Call(context.inputEvent); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs.meta new file mode 100644 index 0000000..4b04f1f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Gesture/RotationGesture.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 155eda39968f1194d9b4b7bbd63596ee +timeCreated: 1464244762 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs b/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs new file mode 100644 index 0000000..96ef55a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs @@ -0,0 +1,228 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// 滑动手势。你可以通过onBegin+onMove+onEnd关心整个滑动过程,也可以只使用onAction关注最后的滑动结果。滑动结果包括方向和加速度,可以从position和velocity获得。 + /// 注意onAction仅当滑动超过一定距离(actionDistance)时才触发。 + /// + public class SwipeGesture : EventDispatcher + { + /// + /// + /// + public GObject host { get; private set; } + + /// + /// 当手指开始扫动时派发该事件。 + /// + public EventListener onBegin { get; private set; } + /// + /// 手指离开屏幕时派发该事件。 + /// + public EventListener onEnd { get; private set; } + /// + /// 手指在滑动时派发该事件。 + /// + public EventListener onMove { get; private set; } + /// + /// 当手指从按下到离开经过的距离大于actionDistance时派发该事件。 + /// + public EventListener onAction { get; private set; } + + /// + /// 手指离开时的加速度 + /// + public Vector2 velocity; + + /// + /// 你可以在onBegin事件中设置这个值,那个后续将根据手指移动的距离修改这个值。如果不设置,那position初始为(0,0),反映手指扫过的距离。 + /// + public Vector2 position; + + /// + /// 移动的变化值 + /// + public Vector2 delta; + + /// + /// The min distance to fire onAction event + /// 派发onAction事件的最小距离。如果手指扫过的距离少于此值,onAction不会触发(但onEnd仍然会派发) + /// + public int actionDistance; + + /// + /// 是否把变化量强制为整数。默认true。 + /// + public bool snapping; + + Vector2 _startPoint; + Vector2 _lastPoint; + float _time; + bool _started; + bool _touchBegan; + + public static int ACTION_DISTANCE = 200; + + public SwipeGesture(GObject host) + { + this.host = host; + actionDistance = ACTION_DISTANCE; + snapping = true; + Enable(true); + + onBegin = new EventListener(this, "onSwipeBegin"); + onEnd = new EventListener(this, "onSwipeEnd"); + onMove = new EventListener(this, "onSwipeMove"); + onAction = new EventListener(this, "onnSwipeAction"); + } + + public void Dispose() + { + Enable(false); + host = null; + } + + public void Enable(bool value) + { + if (value) + { + if (host == GRoot.inst) + { + Stage.inst.onTouchBegin.Add(__touchBegin); + Stage.inst.onTouchMove.Add(__touchMove); + Stage.inst.onTouchEnd.Add(__touchEnd); + } + else + { + host.onTouchBegin.Add(__touchBegin); + host.onTouchMove.Add(__touchMove); + host.onTouchEnd.Add(__touchEnd); + } + } + else + { + _started = false; + _touchBegan = false; + if (host == GRoot.inst) + { + Stage.inst.onTouchBegin.Remove(__touchBegin); + Stage.inst.onTouchMove.Remove(__touchMove); + Stage.inst.onTouchEnd.Remove(__touchEnd); + } + else + { + host.onTouchBegin.Remove(__touchBegin); + host.onTouchMove.Remove(__touchMove); + host.onTouchEnd.Remove(__touchEnd); + } + } + } + + void __touchBegin(EventContext context) + { + if (Stage.inst.touchCount > 1) + { + _touchBegan = false; + if (_started) + { + _started = false; + onEnd.Call(context.inputEvent); + } + return; + } + + InputEvent evt = context.inputEvent; + _startPoint = _lastPoint = host.GlobalToLocal(new Vector2(evt.x, evt.y)); + _lastPoint = _startPoint; + + _time = Time.unscaledTime; + _started = false; + velocity = Vector2.zero; + position = Vector2.zero; + _touchBegan = true; + + context.CaptureTouch(); + } + + void __touchMove(EventContext context) + { + if (!_touchBegan || Stage.inst.touchCount > 1) + return; + + InputEvent evt = context.inputEvent; + Vector2 pt = host.GlobalToLocal(new Vector2(evt.x, evt.y)); + delta = pt - _lastPoint; + if (snapping) + { + delta.x = Mathf.Round(delta.x); + delta.y = Mathf.Round(delta.y); + if (delta.x == 0 && delta.y == 0) + return; + } + + float deltaTime = Time.unscaledDeltaTime; + float elapsed = (Time.unscaledTime - _time) * 60 - 1; + if (elapsed > 1) //速度衰减 + velocity = velocity * Mathf.Pow(0.833f, elapsed); + velocity = Vector3.Lerp(velocity, delta / deltaTime, deltaTime * 10); + _time = Time.unscaledTime; + position += delta; + _lastPoint = pt; + + if (!_started) + { //灵敏度检查,为了和点击区分 + int sensitivity; + if (Stage.touchScreen) + sensitivity = UIConfig.touchDragSensitivity; + else + sensitivity = 5; + + if (Mathf.Abs(delta.x) < sensitivity && Mathf.Abs(delta.y) < sensitivity) + return; + + _started = true; + onBegin.Call(evt); + } + + onMove.Call(evt); + } + + void __touchEnd(EventContext context) + { + _touchBegan = false; + + if (!_started) + return; + + _started = false; + + InputEvent evt = context.inputEvent; + Vector2 pt = host.GlobalToLocal(new Vector2(evt.x, evt.y)); + delta = pt - _lastPoint; + if (snapping) + { + delta.x = Mathf.Round(delta.x); + delta.y = Mathf.Round(delta.y); + } + position += delta; + + //更新速度 + float elapsed = (Time.unscaledTime - _time) * 60 - 1; + if (elapsed > 1) + velocity = velocity * Mathf.Pow(0.833f, elapsed); + if (snapping) + { + velocity.x = Mathf.Round(velocity.x); + velocity.y = Mathf.Round(velocity.y); + } + onEnd.Call(evt); + + pt -= _startPoint; + if (Mathf.Abs(pt.x) > actionDistance || Mathf.Abs(pt.y) > actionDistance) + onAction.Call(evt); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs.meta new file mode 100644 index 0000000..6a47786 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Gesture/SwipeGesture.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7bed3df24eb979345a4d3ed9cd34ca0e +timeCreated: 1464244762 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween.meta b/Assets/Plugins/FairyGUI/Scripts/Tween.meta new file mode 100644 index 0000000..4bcd274 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: af2102ef32b55854c993041a6940127e +folderAsset: yes +timeCreated: 1531222519 +licenseType: Free +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs new file mode 100644 index 0000000..4bd5f15 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs @@ -0,0 +1,248 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2014/07/19 14:11 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php +// +// ============================================================= +// Contains Daniele Giardini's C# port of the easing equations created by Robert Penner +// (all easing equations except for Flash, InFlash, OutFlash, InOutFlash, +// which use some parts of Robert Penner's equations but were created by Daniele Giardini) +// http://robertpenner.com/easing, see license below: +// ============================================================= +// +// TERMS OF USE - EASING EQUATIONS +// +// Open source under the BSD License. +// +// Copyright ? 2001 Robert Penner +// 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 the author nor the names of 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. + +using System; +using UnityEngine; + +#pragma warning disable 1591 +namespace FairyGUI +{ + public static class EaseManager + { + const float _PiOver2 = Mathf.PI * 0.5f; + const float _TwoPi = Mathf.PI * 2; + + /// + /// Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected + /// + public static float Evaluate(EaseType easeType, float time, float duration, + float overshootOrAmplitude = 1.70158f, + float period = 0, + CustomEase customEase = null) + { + if (duration <= 0) + return 1; + + switch (easeType) + { + case EaseType.Linear: + return time / duration; + case EaseType.SineIn: + return -(float)Math.Cos(time / duration * _PiOver2) + 1; + case EaseType.SineOut: + return (float)Math.Sin(time / duration * _PiOver2); + case EaseType.SineInOut: + return -0.5f * ((float)Math.Cos(Mathf.PI * time / duration) - 1); + case EaseType.QuadIn: + return (time /= duration) * time; + case EaseType.QuadOut: + return -(time /= duration) * (time - 2); + case EaseType.QuadInOut: + if ((time /= duration * 0.5f) < 1) return 0.5f * time * time; + return -0.5f * ((--time) * (time - 2) - 1); + case EaseType.CubicIn: + return (time /= duration) * time * time; + case EaseType.CubicOut: + return ((time = time / duration - 1) * time * time + 1); + case EaseType.CubicInOut: + if ((time /= duration * 0.5f) < 1) return 0.5f * time * time * time; + return 0.5f * ((time -= 2) * time * time + 2); + case EaseType.QuartIn: + return (time /= duration) * time * time * time; + case EaseType.QuartOut: + return -((time = time / duration - 1) * time * time * time - 1); + case EaseType.QuartInOut: + if ((time /= duration * 0.5f) < 1) return 0.5f * time * time * time * time; + return -0.5f * ((time -= 2) * time * time * time - 2); + case EaseType.QuintIn: + return (time /= duration) * time * time * time * time; + case EaseType.QuintOut: + return ((time = time / duration - 1) * time * time * time * time + 1); + case EaseType.QuintInOut: + if ((time /= duration * 0.5f) < 1) return 0.5f * time * time * time * time * time; + return 0.5f * ((time -= 2) * time * time * time * time + 2); + case EaseType.ExpoIn: + return (time == 0) ? 0 : (float)Math.Pow(2, 10 * (time / duration - 1)); + case EaseType.ExpoOut: + if (time == duration) return 1; + return (-(float)Math.Pow(2, -10 * time / duration) + 1); + case EaseType.ExpoInOut: + if (time == 0) return 0; + if (time == duration) return 1; + if ((time /= duration * 0.5f) < 1) return 0.5f * (float)Math.Pow(2, 10 * (time - 1)); + return 0.5f * (-(float)Math.Pow(2, -10 * --time) + 2); + case EaseType.CircIn: + return -((float)Math.Sqrt(1 - (time /= duration) * time) - 1); + case EaseType.CircOut: + return (float)Math.Sqrt(1 - (time = time / duration - 1) * time); + case EaseType.CircInOut: + if ((time /= duration * 0.5f) < 1) return -0.5f * ((float)Math.Sqrt(1 - time * time) - 1); + return 0.5f * ((float)Math.Sqrt(1 - (time -= 2) * time) + 1); + case EaseType.ElasticIn: + float s0; + if (time == 0) return 0; + if ((time /= duration) == 1) return 1; + if (period == 0) period = duration * 0.3f; + if (overshootOrAmplitude < 1) + { + overshootOrAmplitude = 1; + s0 = period / 4; + } + else s0 = period / _TwoPi * (float)Math.Asin(1 / overshootOrAmplitude); + return -(overshootOrAmplitude * (float)Math.Pow(2, 10 * (time -= 1)) * (float)Math.Sin((time * duration - s0) * _TwoPi / period)); + case EaseType.ElasticOut: + float s1; + if (time == 0) return 0; + if ((time /= duration) == 1) return 1; + if (period == 0) period = duration * 0.3f; + if (overshootOrAmplitude < 1) + { + overshootOrAmplitude = 1; + s1 = period / 4; + } + else s1 = period / _TwoPi * (float)Math.Asin(1 / overshootOrAmplitude); + return (overshootOrAmplitude * (float)Math.Pow(2, -10 * time) * (float)Math.Sin((time * duration - s1) * _TwoPi / period) + 1); + case EaseType.ElasticInOut: + float s; + if (time == 0) return 0; + if ((time /= duration * 0.5f) == 2) return 1; + if (period == 0) period = duration * (0.3f * 1.5f); + if (overshootOrAmplitude < 1) + { + overshootOrAmplitude = 1; + s = period / 4; + } + else s = period / _TwoPi * (float)Math.Asin(1 / overshootOrAmplitude); + if (time < 1) return -0.5f * (overshootOrAmplitude * (float)Math.Pow(2, 10 * (time -= 1)) * (float)Math.Sin((time * duration - s) * _TwoPi / period)); + return overshootOrAmplitude * (float)Math.Pow(2, -10 * (time -= 1)) * (float)Math.Sin((time * duration - s) * _TwoPi / period) * 0.5f + 1; + case EaseType.BackIn: + return (time /= duration) * time * ((overshootOrAmplitude + 1) * time - overshootOrAmplitude); + case EaseType.BackOut: + return ((time = time / duration - 1) * time * ((overshootOrAmplitude + 1) * time + overshootOrAmplitude) + 1); + case EaseType.BackInOut: + if ((time /= duration * 0.5f) < 1) return 0.5f * (time * time * (((overshootOrAmplitude *= (1.525f)) + 1) * time - overshootOrAmplitude)); + return 0.5f * ((time -= 2) * time * (((overshootOrAmplitude *= (1.525f)) + 1) * time + overshootOrAmplitude) + 2); + case EaseType.BounceIn: + return Bounce.EaseIn(time, duration); + case EaseType.BounceOut: + return Bounce.EaseOut(time, duration); + case EaseType.BounceInOut: + return Bounce.EaseInOut(time, duration); + + case EaseType.Custom: + return customEase != null ? customEase.Evaluate(time / duration) : (time / duration); + + default: + return -(time /= duration) * (time - 2); + } + } + + /// + /// This class contains a C# port of the easing equations created by Robert Penner (http://robertpenner.com/easing). + /// + static class Bounce + { + /// + /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity. + /// + /// + /// Current time (in frames or seconds). + /// + /// + /// Expected easing duration (in frames or seconds). + /// + /// + /// The eased value. + /// + public static float EaseIn(float time, float duration) + { + return 1 - EaseOut(duration - time, duration); + } + + /// + /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity. + /// + /// + /// Current time (in frames or seconds). + /// + /// + /// Expected easing duration (in frames or seconds). + /// + /// + /// The eased value. + /// + public static float EaseOut(float time, float duration) + { + if ((time /= duration) < (1 / 2.75f)) + { + return (7.5625f * time * time); + } + if (time < (2 / 2.75f)) + { + return (7.5625f * (time -= (1.5f / 2.75f)) * time + 0.75f); + } + if (time < (2.5f / 2.75f)) + { + return (7.5625f * (time -= (2.25f / 2.75f)) * time + 0.9375f); + } + return (7.5625f * (time -= (2.625f / 2.75f)) * time + 0.984375f); + } + + /// + /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration. + /// + /// + /// Current time (in frames or seconds). + /// + /// + /// Expected easing duration (in frames or seconds). + /// + /// + /// The eased value. + /// + public static float EaseInOut(float time, float duration) + { + if (time < duration * 0.5f) + { + return EaseIn(time * 2, duration) * 0.5f; + } + return EaseOut(time * 2 - duration, duration) * 0.5f + 0.5f; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs.meta new file mode 100644 index 0000000..098835f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 080d1dce1c76e154c9c8f50151e6d69e +timeCreated: 1531473796 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs new file mode 100644 index 0000000..e64c7e0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public enum EaseType + { + Linear, + SineIn, + SineOut, + SineInOut, + QuadIn, + QuadOut, + QuadInOut, + CubicIn, + CubicOut, + CubicInOut, + QuartIn, + QuartOut, + QuartInOut, + QuintIn, + QuintOut, + QuintInOut, + ExpoIn, + ExpoOut, + ExpoInOut, + CircIn, + CircOut, + CircInOut, + ElasticIn, + ElasticOut, + ElasticInOut, + BackIn, + BackOut, + BackInOut, + BounceIn, + BounceOut, + BounceInOut, + Custom + } + + /// + /// + /// + public class CustomEase + { + Vector2[] _points; + int _pointDensity; + + static GPath helperPath = new GPath(); + + /// + /// + /// + /// + public CustomEase(int pointDensity = 200) + { + _points = new Vector2[pointDensity + 1]; + _pointDensity = pointDensity; + } + + /// + /// + /// + /// + public void Create(IEnumerable pathPoints) + { + helperPath.Create(pathPoints); + for (int i = 0; i <= _pointDensity; i++) + { + Vector3 pt = helperPath.GetPointAt(i / (float)_pointDensity); + _points[i] = pt; + } + _points[0] = Vector2.zero; + _points[_pointDensity] = Vector2.one; + + Array.Sort(_points, (Vector2 p1, Vector2 p2) => + { + return p1.x.CompareTo(p2.x); + }); + } + + /// + /// + /// + /// + /// + public float Evaluate(float time) + { + if (time <= 0) + return 0; + else if (time >= 1) + return 1; + + int low = 0; + int high = _pointDensity; + int cur = 0; + while (low != high) + { + cur = low + (int)((high - low) / 2f); + float x = _points[cur].x; + if (time == x) + break; + else if (time > x) + { + if (low == cur) + { + cur = high; + break; + } + low = cur; + } + else + { + if (high == cur) + { + cur = low; + break; + } + high = cur; + } + } + + Vector2 v0 = _points[cur]; + Vector2 v1; + if (cur == _pointDensity) + v1 = Vector2.one; + else + v1 = _points[cur + 1]; + float k = (v1.y - v0.y) / (v1.x - v0.x); + if (float.IsNaN(k)) + k = 0; + + return v0.y + (time - v0.x) * k; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs.meta new file mode 100644 index 0000000..23492da --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/EaseType.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b3faa49ad96d1cb45acf0a5534094d09 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs new file mode 100644 index 0000000..daefedf --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs @@ -0,0 +1,475 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + [System.Serializable] + public struct GPathPoint + { + /// + /// + /// + public Vector3 pos; + + /// + /// + /// + public Vector3 control1; + + /// + /// + /// + public Vector3 control2; + + /// + /// + /// + public CurveType curveType; + + /// + /// + /// + public bool smooth; + + /// + /// + /// + public enum CurveType + { + CRSpline, + Bezier, + CubicBezier, + Straight + } + + /// + /// + /// + /// + public GPathPoint(Vector3 pos) + { + this.pos = pos; + this.control1 = Vector3.zero; + this.control2 = Vector3.zero; + this.curveType = CurveType.CRSpline; + this.smooth = true; + } + + /// + /// + /// + /// + /// + public GPathPoint(Vector3 pos, Vector3 control) + { + this.pos = pos; + this.control1 = control; + this.control2 = Vector3.zero; + this.curveType = CurveType.Bezier; + this.smooth = true; + } + + /// + /// + /// + /// + /// + /// + public GPathPoint(Vector3 pos, Vector3 control1, Vector3 control2) + { + this.pos = pos; + this.control1 = control1; + this.control2 = control2; + this.curveType = CurveType.CubicBezier; + this.smooth = true; + } + + /// + /// + /// + /// + /// + public GPathPoint(Vector3 pos, CurveType curveType) + { + this.pos = pos; + this.control1 = Vector3.zero; + this.control2 = Vector3.zero; + this.curveType = curveType; + this.smooth = true; + } + } + + /// + /// + /// + public class GPath + { + protected struct Segment + { + public GPathPoint.CurveType type; + public float length; + public int ptStart; + public int ptCount; + } + + protected List _segments; + protected List _points; + protected float _fullLength; + + static List helperList = new List(); + static List splinePoints = new List(); + + public GPath() + { + _segments = new List(); + _points = new List(); + } + + /// + /// + /// + public float length + { + get { return _fullLength; } + } + + /// + /// + /// + /// + /// + public void Create(GPathPoint pt1, GPathPoint pt2) + { + helperList.Clear(); + helperList.Add(pt1); + helperList.Add(pt2); + Create(helperList); + } + + /// + /// + /// + /// + /// + /// + public void Create(GPathPoint pt1, GPathPoint pt2, GPathPoint pt3) + { + helperList.Clear(); + helperList.Add(pt1); + helperList.Add(pt2); + helperList.Add(pt3); + Create(helperList); + } + + /// + /// + /// + /// + /// + /// + /// + public void Create(GPathPoint pt1, GPathPoint pt2, GPathPoint pt3, GPathPoint pt4) + { + helperList.Clear(); + helperList.Add(pt1); + helperList.Add(pt2); + helperList.Add(pt3); + helperList.Add(pt4); + Create(helperList); + } + + /// + /// + /// + /// + public void Create(IEnumerable points) + { + _segments.Clear(); + _points.Clear(); + splinePoints.Clear(); + _fullLength = 0; + + var et = points.GetEnumerator(); + if (!et.MoveNext()) + return; + + GPathPoint prev = et.Current; + if (prev.curveType == GPathPoint.CurveType.CRSpline) + splinePoints.Add(prev.pos); + + while (et.MoveNext()) + { + GPathPoint current = et.Current; + + if (prev.curveType != GPathPoint.CurveType.CRSpline) + { + Segment seg = new Segment(); + seg.type = prev.curveType; + seg.ptStart = _points.Count; + if (prev.curveType == GPathPoint.CurveType.Straight) + { + seg.ptCount = 2; + _points.Add(prev.pos); + _points.Add(current.pos); + } + else if (prev.curveType == GPathPoint.CurveType.Bezier) + { + seg.ptCount = 3; + _points.Add(prev.pos); + _points.Add(current.pos); + _points.Add(prev.control1); + } + else if (prev.curveType == GPathPoint.CurveType.CubicBezier) + { + seg.ptCount = 4; + _points.Add(prev.pos); + _points.Add(current.pos); + _points.Add(prev.control1); + _points.Add(prev.control2); + } + seg.length = Vector3.Distance(prev.pos, current.pos); + _fullLength += seg.length; + _segments.Add(seg); + } + + if (current.curveType != GPathPoint.CurveType.CRSpline) + { + if (splinePoints.Count > 0) + { + splinePoints.Add(current.pos); + CreateSplineSegment(); + } + } + else + splinePoints.Add(current.pos); + + prev = current; + } + + if (splinePoints.Count > 1) + CreateSplineSegment(); + } + + void CreateSplineSegment() + { + int cnt = splinePoints.Count; + splinePoints.Insert(0, splinePoints[0]); + splinePoints.Add(splinePoints[cnt]); + splinePoints.Add(splinePoints[cnt]); + cnt += 3; + + Segment seg = new Segment(); + seg.type = GPathPoint.CurveType.CRSpline; + seg.ptStart = _points.Count; + seg.ptCount = cnt; + _points.AddRange(splinePoints); + + seg.length = 0; + for (int i = 1; i < cnt; i++) + seg.length += Vector3.Distance(splinePoints[i - 1], splinePoints[i]); + _fullLength += seg.length; + _segments.Add(seg); + splinePoints.Clear(); + } + + /// + /// + /// + public void Clear() + { + _segments.Clear(); + _points.Clear(); + } + + /// + /// + /// + /// + /// + public Vector3 GetPointAt(float t) + { + t = Mathf.Clamp01(t); + int cnt = _segments.Count; + if (cnt == 0) + return Vector3.zero; + + Segment seg; + if (t == 1) + { + seg = _segments[cnt - 1]; + + if (seg.type == GPathPoint.CurveType.Straight) + return Vector3.Lerp(_points[seg.ptStart], _points[seg.ptStart + 1], t); + else if (seg.type == GPathPoint.CurveType.Bezier || seg.type == GPathPoint.CurveType.CubicBezier) + return onBezierCurve(seg.ptStart, seg.ptCount, t); + else + return onCRSplineCurve(seg.ptStart, seg.ptCount, t); + } + + float len = t * _fullLength; + Vector3 pt = new Vector3(); + for (int i = 0; i < cnt; i++) + { + seg = _segments[i]; + + len -= seg.length; + if (len < 0) + { + t = 1 + len / seg.length; + + if (seg.type == GPathPoint.CurveType.Straight) + pt = Vector3.Lerp(_points[seg.ptStart], _points[seg.ptStart + 1], t); + else if (seg.type == GPathPoint.CurveType.Bezier || seg.type == GPathPoint.CurveType.CubicBezier) + pt = onBezierCurve(seg.ptStart, seg.ptCount, t); + else + pt = onCRSplineCurve(seg.ptStart, seg.ptCount, t); + + break; + } + } + + return pt; + } + + /// + /// + /// + public int segmentCount + { + get { return _segments.Count; } + } + + /// + /// + /// + /// + /// + public float GetSegmentLength(int segmentIndex) + { + return _segments[segmentIndex].length; + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void GetPointsInSegment(int segmentIndex, float t0, float t1, List points, List ts = null, float pointDensity = 0.1f) + { + if (points == null) + points = new List(); + + if (ts != null) + ts.Add(t0); + Segment seg = _segments[segmentIndex]; + if (seg.type == GPathPoint.CurveType.Straight) + { + points.Add(Vector3.Lerp(_points[seg.ptStart], _points[seg.ptStart + 1], t0)); + points.Add(Vector3.Lerp(_points[seg.ptStart], _points[seg.ptStart + 1], t1)); + } + else if (seg.type == GPathPoint.CurveType.Bezier || seg.type == GPathPoint.CurveType.CubicBezier) + { + points.Add(onBezierCurve(seg.ptStart, seg.ptCount, t0)); + int SmoothAmount = (int)Mathf.Min(seg.length * pointDensity, 50); + for (int j = 0; j <= SmoothAmount; j++) + { + float t = (float)j / SmoothAmount; + if (t > t0 && t < t1) + { + points.Add(onBezierCurve(seg.ptStart, seg.ptCount, t)); + if (ts != null) + ts.Add(t); + } + } + points.Add(onBezierCurve(seg.ptStart, seg.ptCount, t1)); + } + else + { + points.Add(onCRSplineCurve(seg.ptStart, seg.ptCount, t0)); + int SmoothAmount = (int)Mathf.Min(seg.length * pointDensity, 50); + for (int j = 0; j <= SmoothAmount; j++) + { + float t = (float)j / SmoothAmount; + if (t > t0 && t < t1) + { + points.Add(onCRSplineCurve(seg.ptStart, seg.ptCount, t)); + if (ts != null) + ts.Add(t); + } + } + points.Add(onCRSplineCurve(seg.ptStart, seg.ptCount, t1)); + } + + if (ts != null) + ts.Add(t1); + } + + /// + /// + /// + /// + public void GetAllPoints(List points, float pointDensity = 0.1f) + { + int cnt = _segments.Count; + for (int i = 0; i < cnt; i++) + GetPointsInSegment(i, 0, 1, points, null, pointDensity); + } + + /// + /// Catmull rom spline implementation + /// by Stéphane Drouot, laei - http://games.laei.org + /// + /// Actual translation of math gebrish to C# credit is due to + /// Boon Cotter - http://www.booncotter.com/waypoints-catmull-rom-splines/ + /// + /// This takes a list of vector3 (or an array) and gives a function called .onCurve(t) + /// returning a value on a Catmull-Rom spline for 0 <= t <= 1 + /// + Vector3 onCRSplineCurve(int ptStart, int ptCount, float t) + { + int adjustedIndex = Mathf.FloorToInt(t * (ptCount - 4)) + ptStart; //Since the equation works with 4 points, we adjust the starting point depending on t to return a point on the specific segment + + Vector3 result = new Vector3(); + + Vector3 p0 = _points[adjustedIndex]; + Vector3 p1 = _points[adjustedIndex + 1]; + Vector3 p2 = _points[adjustedIndex + 2]; + Vector3 p3 = _points[adjustedIndex + 3]; + + float adjustedT = (t == 1f) ? 1f : Mathf.Repeat(t * (ptCount - 4), 1f); // Then we adjust t to be that value on that new piece of segment... for t == 1f don't use repeat (that would return 0f); + + float t0 = ((-adjustedT + 2f) * adjustedT - 1f) * adjustedT * 0.5f; + float t1 = (((3f * adjustedT - 5f) * adjustedT) * adjustedT + 2f) * 0.5f; + float t2 = ((-3f * adjustedT + 4f) * adjustedT + 1f) * adjustedT * 0.5f; + float t3 = ((adjustedT - 1f) * adjustedT * adjustedT) * 0.5f; + + result.x = p0.x * t0 + p1.x * t1 + p2.x * t2 + p3.x * t3; + result.y = p0.y * t0 + p1.y * t1 + p2.y * t2 + p3.y * t3; + result.z = p0.z * t0 + p1.z * t1 + p2.z * t2 + p3.z * t3; + + return result; + } + + Vector3 onBezierCurve(int ptStart, int ptCount, float t) + { + float t2 = 1f - t; + Vector3 p0 = _points[ptStart]; + Vector3 p1 = _points[ptStart + 1]; + Vector3 cp0 = _points[ptStart + 2]; + + if (ptCount == 4) + { + Vector3 cp1 = _points[ptStart + 3]; + return t2 * t2 * t2 * p0 + 3f * t2 * t2 * t * cp0 + 3f * t2 * t * t * cp1 + t * t * t * p1; + } + else + return t2 * t2 * p0 + 2f * t2 * t * cp0 + t * t * p1; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs.meta new file mode 100644 index 0000000..6df535d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/GPath.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3755f976b6dd17c408731fa87b3cb006 +timeCreated: 1546592349 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs new file mode 100644 index 0000000..b2d985d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs @@ -0,0 +1,189 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class GTween + { + /// + /// + /// + public static bool catchCallbackExceptions = false; + + /// + /// + /// + /// + /// + /// + /// + public static GTweener To(float startValue, float endValue, float duration) + { + return TweenManager.CreateTween()._To(startValue, endValue, duration); + } + + /// + /// + /// + /// + /// + /// + /// + public static GTweener To(Vector2 startValue, Vector2 endValue, float duration) + { + return TweenManager.CreateTween()._To(startValue, endValue, duration); + } + + /// + /// + /// + /// + /// + /// + /// + public static GTweener To(Vector3 startValue, Vector3 endValue, float duration) + { + return TweenManager.CreateTween()._To(startValue, endValue, duration); + } + + /// + /// + /// + /// + /// + /// + /// + public static GTweener To(Vector4 startValue, Vector4 endValue, float duration) + { + return TweenManager.CreateTween()._To(startValue, endValue, duration); + } + + /// + /// + /// + /// + /// + /// + /// + public static GTweener To(Color startValue, Color endValue, float duration) + { + return TweenManager.CreateTween()._To(startValue, endValue, duration); + } + + /// + /// + /// + /// + /// + /// + /// + public static GTweener ToDouble(double startValue, double endValue, float duration) + { + return TweenManager.CreateTween()._To(startValue, endValue, duration); + } + + /// + /// + /// + /// + /// + public static GTweener DelayedCall(float delay) + { + return TweenManager.CreateTween().SetDelay(delay); + } + + /// + /// + /// + /// + /// + /// + /// + public static GTweener Shake(Vector3 startValue, float amplitude, float duration) + { + return TweenManager.CreateTween()._Shake(startValue, amplitude, duration); + } + + /// + /// + /// + /// + /// + public static bool IsTweening(object target) + { + return TweenManager.IsTweening(target, TweenPropType.None); + } + + /// + /// + /// + /// + /// + /// + public static bool IsTweening(object target, TweenPropType propType) + { + return TweenManager.IsTweening(target, propType); + } + + /// + /// + /// + /// + public static void Kill(object target) + { + TweenManager.KillTweens(target, TweenPropType.None, false); + } + + /// + /// + /// + /// + /// + public static void Kill(object target, bool complete) + { + TweenManager.KillTweens(target, TweenPropType.None, complete); + } + + /// + /// + /// + /// + /// + /// + public static void Kill(object target, TweenPropType propType, bool complete) + { + TweenManager.KillTweens(target, propType, complete); + } + + /// + /// + /// + /// + /// + public static GTweener GetTween(object target) + { + return TweenManager.GetTween(target, TweenPropType.None); + } + + /// + /// + /// + /// + /// + /// + public static GTweener GetTween(object target, TweenPropType propType) + { + return TweenManager.GetTween(target, propType); + } + + /// + /// + /// + public static void Clean() + { + TweenManager.Clean(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs.meta new file mode 100644 index 0000000..369c30f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/GTween.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 613566965c56f6e4e9a95936b8128f90 +timeCreated: 1531222519 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs new file mode 100644 index 0000000..613152e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs @@ -0,0 +1,863 @@ +using System; +using UnityEngine; +#if FAIRYGUI_TOLUA +using LuaInterface; +#endif + +namespace FairyGUI +{ + /// + /// + /// + public delegate void GTweenCallback(); + + /// + /// + /// + /// + public delegate void GTweenCallback1(GTweener tweener); + + /// + /// + /// + public interface ITweenListener + { + /// + /// + /// + /// + void OnTweenStart(GTweener tweener); + + /// + /// + /// + /// + void OnTweenUpdate(GTweener tweener); + + /// + /// + /// + /// + void OnTweenComplete(GTweener tweener); + } + + /// + /// + /// + public class GTweener + { + public static EaseType defaultEaseType = EaseType.QuadOut; + public static bool defaultIgnoreEngineTimeScale = false; + public static float defaultTimeScale = 1; + + internal object _target; + internal TweenPropType _propType; + internal bool _killed; + internal bool _paused; + + float _delay; + float _duration; + float _breakpoint; + EaseType _easeType; + float _easeOvershootOrAmplitude; + float _easePeriod; + int _repeat; + bool _yoyo; + float _timeScale; + bool _ignoreEngineTimeScale; + bool _snapping; + object _userData; + GPath _path; + CustomEase _customEase; + + GTweenCallback _onUpdate; + GTweenCallback _onStart; + GTweenCallback _onComplete; + GTweenCallback1 _onUpdate1; + GTweenCallback1 _onStart1; + GTweenCallback1 _onComplete1; + ITweenListener _listener; + + TweenValue _startValue; + TweenValue _endValue; + TweenValue _value; + TweenValue _deltaValue; + int _valueSize; + + bool _started; + int _ended; + float _elapsedTime; + float _normalizedTime; + int _smoothStart; + + public GTweener() + { + _startValue = new TweenValue(); + _endValue = new TweenValue(); + _value = new TweenValue(); + _deltaValue = new TweenValue(); + } + + /// + /// + /// + /// + /// + public GTweener SetDelay(float value) + { + _delay = value; + return this; + } + + /// + /// + /// + public float delay + { + get { return _delay; } + } + + /// + /// + /// + /// + /// + public GTweener SetDuration(float value) + { + _duration = value; + return this; + } + + /// + /// + /// + public float duration + { + get { return _duration; } + } + + /// + /// + /// + /// + /// + public GTweener SetBreakpoint(float value) + { + _breakpoint = value; + return this; + } + + /// + /// + /// + /// + /// + public GTweener SetEase(EaseType value) + { + _easeType = value; + return this; + } + + /// + /// + /// + /// + /// + /// + public GTweener SetEase(EaseType value, CustomEase customEase) + { + _easeType = value; + _customEase = customEase; + return this; + } + + /// + /// + /// + /// + /// + public GTweener SetEasePeriod(float value) + { + _easePeriod = value; + return this; + } + + /// + /// + /// + /// + /// + public GTweener SetEaseOvershootOrAmplitude(float value) + { + _easeOvershootOrAmplitude = value; + return this; + } + + /// + /// + /// + /// + /// + /// + public GTweener SetRepeat(int times, bool yoyo = false) + { + _repeat = times; + _yoyo = yoyo; + return this; + } + + /// + /// + /// + public int repeat + { + get { return _repeat; } + } + + /// + /// + /// + /// + /// + public GTweener SetTimeScale(float value) + { + _timeScale = value; + return this; + } + + /// + /// + /// + /// + /// + public GTweener SetIgnoreEngineTimeScale(bool value) + { + _ignoreEngineTimeScale = value; + return this; + } + + /// + /// + /// + /// + /// + public GTweener SetSnapping(bool value) + { + _snapping = value; + return this; + } + + /// + /// + /// + /// + /// + public GTweener SetPath(GPath value) + { + _path = value; + return this; + } + + /// + /// + /// + /// + /// + public GTweener SetTarget(object value) + { + _target = value; + _propType = TweenPropType.None; + return this; + } + + /// + /// + /// + /// + /// + /// + public GTweener SetTarget(object value, TweenPropType propType) + { + _target = value; + _propType = propType; + return this; + } + + /// + /// + /// + public object target + { + get { return _target; } + } + + /// + /// + /// + /// + /// + public GTweener SetUserData(object value) + { + _userData = value; + return this; + } + + /// + /// + /// + public object userData + { + get { return _userData; } + } + + /// + /// + /// + /// + /// +#if FAIRYGUI_TOLUA + [NoToLua] +#endif + public GTweener OnUpdate(GTweenCallback callback) + { + _onUpdate = callback; + return this; + } + + /// + /// + /// + /// + /// +#if FAIRYGUI_TOLUA + [NoToLua] +#endif + public GTweener OnStart(GTweenCallback callback) + { + _onStart = callback; + return this; + } + + /// + /// + /// + /// + /// +#if FAIRYGUI_TOLUA + [NoToLua] +#endif + public GTweener OnComplete(GTweenCallback callback) + { + _onComplete = callback; + return this; + } + + /// + /// + /// + /// + /// + public GTweener OnUpdate(GTweenCallback1 callback) + { + _onUpdate1 = callback; + return this; + } + + /// + /// + /// + /// + /// + public GTweener OnStart(GTweenCallback1 callback) + { + _onStart1 = callback; + return this; + } + + /// + /// + /// + /// + /// + public GTweener OnComplete(GTweenCallback1 callback) + { + _onComplete1 = callback; + return this; + } + + /// + /// + /// + /// + /// + public GTweener SetListener(ITweenListener value) + { + _listener = value; + return this; + } + + /// + /// + /// + public TweenValue startValue + { + get { return _startValue; } + } + + /// + /// + /// + public TweenValue endValue + { + get { return _endValue; } + } + + /// + /// + /// + public TweenValue value + { + get { return _value; } + } + + /// + /// + /// + public TweenValue deltaValue + { + get { return _deltaValue; } + } + + /// + /// + /// + public float normalizedTime + { + get { return _normalizedTime; } + } + + /// + /// + /// + public bool completed + { + get { return _ended != 0; } + } + + /// + /// + /// + public bool allCompleted + { + get { return _ended == 1; } + } + + /// + /// + /// + /// + /// + public GTweener SetPaused(bool paused) + { + _paused = paused; + if (_paused) + _smoothStart = 0; + return this; + } + + /// + /// + /// + /// + public void Seek(float time) + { + if (_killed) + return; + + _elapsedTime = time; + if (_elapsedTime < _delay) + { + if (_started) + _elapsedTime = _delay; + else + return; + } + + Update(); + } + + /// + /// + /// + /// + public void Kill(bool complete = false) + { + if (_killed) + return; + + if (complete) + { + if (_ended == 0) + { + if (_breakpoint >= 0) + _elapsedTime = _delay + _breakpoint; + else if (_repeat >= 0) + _elapsedTime = _delay + _duration * (_repeat + 1); + else + _elapsedTime = _delay + _duration * 2; + Update(); + } + + CallCompleteCallback(); + } + + _killed = true; + } + + internal GTweener _To(float start, float end, float duration) + { + _valueSize = 1; + _startValue.x = start; + _endValue.x = end; + _value.x = start; + _duration = duration; + return this; + } + + internal GTweener _To(Vector2 start, Vector2 end, float duration) + { + _valueSize = 2; + _startValue.vec2 = start; + _endValue.vec2 = end; + _value.vec2 = start; + _duration = duration; + return this; + } + + internal GTweener _To(Vector3 start, Vector3 end, float duration) + { + _valueSize = 3; + _startValue.vec3 = start; + _endValue.vec3 = end; + _value.vec3 = start; + _duration = duration; + return this; + } + + internal GTweener _To(Vector4 start, Vector4 end, float duration) + { + _valueSize = 4; + _startValue.vec4 = start; + _endValue.vec4 = end; + _value.vec4 = start; + _duration = duration; + return this; + } + + internal GTweener _To(Color start, Color end, float duration) + { + _valueSize = 4; + _startValue.color = start; + _endValue.color = end; + _value.color = start; + _duration = duration; + return this; + } + + internal GTweener _To(double start, double end, float duration) + { + _valueSize = 5; + _startValue.d = start; + _endValue.d = end; + _value.d = start; + _duration = duration; + return this; + } + + internal GTweener _Shake(Vector3 start, float amplitude, float duration) + { + _valueSize = 6; + _startValue.vec3 = start; + _startValue.w = amplitude; + _duration = duration; + _easeType = EaseType.Linear; + return this; + } + + internal void _Init() + { + _delay = 0; + _duration = 0; + _breakpoint = -1; + _easeType = defaultEaseType; + _timeScale = defaultTimeScale; + _ignoreEngineTimeScale = defaultIgnoreEngineTimeScale; + _easePeriod = 0; + _easeOvershootOrAmplitude = 1.70158f; + _snapping = false; + _repeat = 0; + _yoyo = false; + _valueSize = 0; + _started = false; + _paused = false; + _killed = false; + _elapsedTime = 0; + _normalizedTime = 0; + _ended = 0; + _path = null; + _customEase = null; + _smoothStart = Time.frameCount == 1 ? 3 : 1;//刚启动时会有多帧的超时 + } + + internal void _Reset() + { + _target = null; + _listener = null; + _userData = null; + _onStart = _onUpdate = _onComplete = null; + _onStart1 = _onUpdate1 = _onComplete1 = null; + } + + internal void _Update() + { + if (_ended != 0) //Maybe completed by seek + { + CallCompleteCallback(); + _killed = true; + return; + } + + float dt; + if (_smoothStart > 0) + { + _smoothStart--; + dt = Mathf.Clamp(Time.unscaledDeltaTime, 0, Application.targetFrameRate > 0 ? (1.0f / Application.targetFrameRate) : 0.016f); + if (!_ignoreEngineTimeScale) + dt *= Time.timeScale; + } + else if (_ignoreEngineTimeScale) + dt = Time.unscaledDeltaTime; + else + dt = Time.deltaTime; + if (_timeScale != 1) + dt *= _timeScale; + if (dt == 0) + return; + + _elapsedTime += dt; + Update(); + + if (_ended != 0) + { + if (!_killed) + { + CallCompleteCallback(); + _killed = true; + } + } + } + + void Update() + { + _ended = 0; + + if (_valueSize == 0) //DelayedCall + { + if (_elapsedTime >= _delay + _duration) + _ended = 1; + + return; + } + + if (!_started) + { + if (_elapsedTime < _delay) + return; + + _started = true; + CallStartCallback(); + if (_killed) + return; + } + + bool reversed = false; + float tt = _elapsedTime - _delay; + if (_breakpoint >= 0 && tt >= _breakpoint) + { + tt = _breakpoint; + _ended = 2; + } + + if (_repeat != 0) + { + int round = Mathf.FloorToInt(tt / _duration); + tt -= _duration * round; + if (_yoyo) + reversed = round % 2 == 1; + + if (_repeat > 0 && _repeat - round < 0) + { + if (_yoyo) + reversed = _repeat % 2 == 1; + tt = _duration; + _ended = 1; + } + } + else if (tt >= _duration) + { + tt = _duration; + _ended = 1; + } + + _normalizedTime = EaseManager.Evaluate(_easeType, reversed ? (_duration - tt) : tt, _duration, + _easeOvershootOrAmplitude, _easePeriod, _customEase); + + _value.SetZero(); + _deltaValue.SetZero(); + + if (_valueSize == 5) + { + double d = _startValue.d + (_endValue.d - _startValue.d) * _normalizedTime; + if (_snapping) + d = Math.Round(d); + _deltaValue.d = d - _value.d; + _value.d = d; + _value.x = (float)d; + } + else if (_valueSize == 6) + { + if (_ended == 0) + { + Vector3 r = UnityEngine.Random.insideUnitSphere; + r.x = r.x > 0 ? 1 : -1; + r.y = r.y > 0 ? 1 : -1; + r.z = r.z > 0 ? 1 : -1; + r *= _startValue.w * (1 - _normalizedTime); + + _deltaValue.vec3 = r; + _value.vec3 = _startValue.vec3 + r; + } + else + _value.vec3 = _startValue.vec3; + } + else if (_path != null) + { + Vector3 vec3 = _path.GetPointAt(_normalizedTime); + if (_snapping) + { + vec3.x = Mathf.Round(vec3.x); + vec3.y = Mathf.Round(vec3.y); + vec3.z = Mathf.Round(vec3.z); + } + _deltaValue.vec3 = vec3 - _value.vec3; + _value.vec3 = vec3; + } + else + { + for (int i = 0; i < _valueSize; i++) + { + float n1 = _startValue[i]; + float n2 = _endValue[i]; + float f = n1 + (n2 - n1) * _normalizedTime; + if (_snapping) + f = Mathf.Round(f); + _deltaValue[i] = f - _value[i]; + _value[i] = f; + } + _value.d = _value.x; + } + + if (_target != null && _propType != TweenPropType.None) + TweenPropTypeUtils.SetProps(_target, _propType, _value); + + CallUpdateCallback(); + } + + void CallStartCallback() + { + if (GTween.catchCallbackExceptions) + { + try + { + if (_onStart1 != null) + _onStart1(this); + if (_onStart != null) + _onStart(); + if (_listener != null) + _listener.OnTweenStart(this); + } + catch (Exception e) + { + Debug.LogWarning("FairyGUI: error in start callback > " + e.Message); + } + } + else + { + if (_onStart1 != null) + _onStart1(this); + if (_onStart != null) + _onStart(); + if (_listener != null) + _listener.OnTweenStart(this); + } + } + + void CallUpdateCallback() + { + if (GTween.catchCallbackExceptions) + { + try + { + if (_onUpdate1 != null) + _onUpdate1(this); + if (_onUpdate != null) + _onUpdate(); + if (_listener != null) + _listener.OnTweenUpdate(this); + } + catch (Exception e) + { + Debug.LogWarning("FairyGUI: error in update callback > " + e.Message); + } + } + else + { + if (_onUpdate1 != null) + _onUpdate1(this); + if (_onUpdate != null) + _onUpdate(); + if (_listener != null) + _listener.OnTweenUpdate(this); + } + } + + void CallCompleteCallback() + { + if (GTween.catchCallbackExceptions) + { + try + { + if (_onComplete1 != null) + _onComplete1(this); + if (_onComplete != null) + _onComplete(); + if (_listener != null) + _listener.OnTweenComplete(this); + } + catch (Exception e) + { + Debug.LogWarning("FairyGUI: error in complete callback > " + e.Message); + } + } + else + { + if (_onComplete1 != null) + _onComplete1(this); + if (_onComplete != null) + _onComplete(); + if (_listener != null) + _listener.OnTweenComplete(this); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs.meta new file mode 100644 index 0000000..fdd151e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/GTweener.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 48e1b5ac4a90a5649962a3e75fd666c2 +timeCreated: 1531222519 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs new file mode 100644 index 0000000..379939a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs @@ -0,0 +1,191 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + internal static class TweenManager + { + static GTweener[] _activeTweens = new GTweener[30]; + static List _tweenerPool = new List(30); + static int _totalActiveTweens = 0; + static bool _inited = false; + + internal static GTweener CreateTween() + { + if (!_inited) + Init(); + + GTweener tweener; + int cnt = _tweenerPool.Count; + if (cnt > 0) + { + tweener = _tweenerPool[cnt - 1]; + _tweenerPool.RemoveAt(cnt - 1); + } + else + tweener = new GTweener(); + tweener._Init(); + _activeTweens[_totalActiveTweens++] = tweener; + + if (_totalActiveTweens == _activeTweens.Length) + { + GTweener[] newArray = new GTweener[_activeTweens.Length + Mathf.CeilToInt(_activeTweens.Length * 0.5f)]; + _activeTweens.CopyTo(newArray, 0); + _activeTweens = newArray; + } + + return tweener; + } + + internal static bool IsTweening(object target, TweenPropType propType) + { + if (target == null) + return false; + + bool anyType = propType == TweenPropType.None; + for (int i = 0; i < _totalActiveTweens; i++) + { + GTweener tweener = _activeTweens[i]; + if (tweener != null && tweener.target == target && !tweener._killed + && (anyType || tweener._propType == propType)) + return true; + } + + return false; + } + + internal static bool KillTweens(object target, TweenPropType propType, bool completed) + { + if (target == null) + return false; + + bool flag = false; + int cnt = _totalActiveTweens; + bool anyType = propType == TweenPropType.None; + for (int i = 0; i < cnt; i++) + { + GTweener tweener = _activeTweens[i]; + if (tweener != null && tweener.target == target && !tweener._killed + && (anyType || tweener._propType == propType)) + { + tweener.Kill(completed); + flag = true; + } + } + + return flag; + } + + internal static GTweener GetTween(object target, TweenPropType propType) + { + if (target == null) + return null; + + int cnt = _totalActiveTweens; + bool anyType = propType == TweenPropType.None; + for (int i = 0; i < cnt; i++) + { + GTweener tweener = _activeTweens[i]; + if (tweener != null && tweener.target == target && !tweener._killed + && (anyType || tweener._propType == propType)) + { + return tweener; + } + } + + return null; + } + + internal static void Update() + { + int cnt = _totalActiveTweens; + int freePosStart = -1; + for (int i = 0; i < cnt; i++) + { + GTweener tweener = _activeTweens[i]; + if (tweener == null) + { + if (freePosStart == -1) + freePosStart = i; + } + else if (tweener._killed) + { + tweener._Reset(); + _tweenerPool.Add(tweener); + _activeTweens[i] = null; + + if (freePosStart == -1) + freePosStart = i; + } + else + { + if ((tweener._target is GObject) && ((GObject)tweener._target)._disposed) + tweener._killed = true; + else if (!tweener._paused) + tweener._Update(); + + if (freePosStart != -1) + { + _activeTweens[freePosStart] = tweener; + _activeTweens[i] = null; + freePosStart++; + } + } + } + + if (freePosStart >= 0) + { + if (_totalActiveTweens != cnt) //new tweens added + { + int j = cnt; + cnt = _totalActiveTweens - cnt; + for (int i = 0; i < cnt; i++) + { + _activeTweens[freePosStart++] = _activeTweens[j]; + _activeTweens[j] = null; + j++; + } + } + _totalActiveTweens = freePosStart; + } + } + + internal static void Clean() + { + _tweenerPool.Clear(); + } + + static void Init() + { + _inited = true; + if (Application.isPlaying) + { + GameObject gameObject = new GameObject("[FairyGUI.TweenManager]"); + gameObject.hideFlags = HideFlags.HideInHierarchy; + gameObject.SetActive(true); + Object.DontDestroyOnLoad(gameObject); + + gameObject.AddComponent(); + } + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + _tweenerPool.Clear(); + _activeTweens = new GTweener[30]; + _totalActiveTweens = 0; + _inited = false; + } +#endif + + class TweenEngine : MonoBehaviour + { + void Update() + { + TweenManager.Update(); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs.meta new file mode 100644 index 0000000..73db2cc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3048174c9aaf2e840953e3cab497a426 +timeCreated: 1531222519 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs new file mode 100644 index 0000000..1842267 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs @@ -0,0 +1,103 @@ +namespace FairyGUI +{ + /// + /// + /// + public enum TweenPropType + { + None, + X, + Y, + Z, + XY, + Position, + Width, + Height, + Size, + ScaleX, + ScaleY, + Scale, + Rotation, + RotationX, + RotationY, + Alpha, + Progress + } + + internal class TweenPropTypeUtils + { + internal static void SetProps(object target, TweenPropType propType, TweenValue value) + { + GObject g = target as GObject; + if (g == null) + return; + + switch (propType) + { + case TweenPropType.X: + g.x = value.x; + break; + + case TweenPropType.Y: + g.y = value.x; + break; + + case TweenPropType.Z: + g.z = value.x; + break; + + case TweenPropType.XY: + g.xy = value.vec2; + break; + + case TweenPropType.Position: + g.position = value.vec3; + break; + + case TweenPropType.Width: + g.width = value.x; + break; + + case TweenPropType.Height: + g.height = value.x; + break; + + case TweenPropType.Size: + g.size = value.vec2; + break; + + case TweenPropType.ScaleX: + g.scaleX = value.x; + break; + + case TweenPropType.ScaleY: + g.scaleY = value.x; + break; + + case TweenPropType.Scale: + g.scale = value.vec2; + break; + + case TweenPropType.Rotation: + g.rotation = value.x; + break; + + case TweenPropType.RotationX: + g.rotationX = value.x; + break; + + case TweenPropType.RotationY: + g.rotationY = value.x; + break; + + case TweenPropType.Alpha: + g.alpha = value.x; + break; + + case TweenPropType.Progress: + g.asProgress.Update(value.d); + break; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs.meta new file mode 100644 index 0000000..fa3ba5d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenPropType.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7000822d8123b4344b21dcfb230f8938 +timeCreated: 1531473796 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs new file mode 100644 index 0000000..0b18d05 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs @@ -0,0 +1,151 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class TweenValue + { + /// + /// + /// + public float x; + + /// + /// + /// + public float y; + + /// + /// + /// + public float z; + + /// + /// + /// + public float w; + + /// + /// + /// + public double d; + + public TweenValue() + { + } + + /// + /// + /// + public Vector2 vec2 + { + get { return new Vector2(x, y); } + set + { + x = value.x; + y = value.y; + } + } + + /// + /// + /// + public Vector3 vec3 + { + get { return new Vector3(x, y, z); } + set + { + x = value.x; + y = value.y; + z = value.z; + } + } + + /// + /// + /// + public Vector4 vec4 + { + get { return new Vector4(x, y, z, w); } + set + { + x = value.x; + y = value.y; + z = value.z; + w = value.w; + } + } + + /// + /// + /// + public Color color + { + get { return new Color(x, y, z, w); } + set + { + x = value.r; + y = value.g; + z = value.b; + w = value.a; + } + } + + /// + /// + /// + /// + /// + public float this[int index] + { + get + { + switch (index) + { + case 0: + return x; + case 1: + return y; + case 2: + return z; + case 3: + return w; + default: + throw new System.Exception("Index out of bounds: " + index); + } + } + + set + { + switch (index) + { + case 0: + x = value; + break; + case 1: + y = value; + break; + case 2: + z = value; + break; + case 3: + w = value; + break; + default: + throw new System.Exception("Index out of bounds: " + index); + } + } + } + + /// + /// + /// + public void SetZero() + { + x = y = z = w = 0; + d = 0; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs.meta new file mode 100644 index 0000000..3799346 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Tween/TweenValue.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 97e8a1ca496b4d34cad5f2420a9f8809 +timeCreated: 1531473796 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI.meta b/Assets/Plugins/FairyGUI/Scripts/UI.meta new file mode 100644 index 0000000..db6f75a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 929603a3379395146b898542bc37d31b +folderAsset: yes +timeCreated: 1460480287 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Action.meta new file mode 100644 index 0000000..e077566 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Action.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 76c9ac9d39933da4e833eddb1a96581a +folderAsset: yes +timeCreated: 1500559678 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs new file mode 100644 index 0000000..a22d5a2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs @@ -0,0 +1,52 @@ +using FairyGUI.Utils; + +namespace FairyGUI +{ + public class ChangePageAction : ControllerAction + { + public string objectId; + public string controllerName; + public string targetPage; + + public ChangePageAction() + { + } + + override protected void Enter(Controller controller) + { + if (string.IsNullOrEmpty(controllerName)) + return; + + GComponent gcom; + if (!string.IsNullOrEmpty(objectId)) + gcom = controller.parent.GetChildById(objectId) as GComponent; + else + gcom = controller.parent; + if (gcom != null) + { + Controller cc = gcom.GetController(controllerName); + if (cc != null && cc != controller && !cc.changing) + { + if (this.targetPage == "~1") + { + if (controller.selectedIndex < cc.pageCount) + cc.selectedIndex = controller.selectedIndex; + } + else if (this.targetPage == "~2") + cc.selectedPage = controller.selectedPage; + else + cc.selectedPageId = this.targetPage; + } + } + } + + override public void Setup(ByteBuffer buffer) + { + base.Setup(buffer); + + objectId = buffer.ReadS(); + controllerName = buffer.ReadS(); + targetPage = buffer.ReadS(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs.meta new file mode 100644 index 0000000..f81dfb2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ChangePageAction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 625a0a9a670984b47a4b170a801c850e +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs new file mode 100644 index 0000000..b713a01 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs @@ -0,0 +1,68 @@ +using System; +using FairyGUI.Utils; + +namespace FairyGUI +{ + public class ControllerAction + { + public enum ActionType + { + PlayTransition, + ChangePage + } + + public string[] fromPage; + public string[] toPage; + + public static ControllerAction CreateAction(ActionType type) + { + switch (type) + { + case ActionType.PlayTransition: + return new PlayTransitionAction(); + + case ActionType.ChangePage: + return new ChangePageAction(); + } + return null; + } + + public ControllerAction() + { + } + + public void Run(Controller controller, string prevPage, string curPage) + { + if ((fromPage == null || fromPage.Length == 0 || Array.IndexOf(fromPage, prevPage) != -1) + && (toPage == null || toPage.Length == 0 || Array.IndexOf(toPage, curPage) != -1)) + Enter(controller); + else + Leave(controller); + } + + virtual protected void Enter(Controller controller) + { + + } + + virtual protected void Leave(Controller controller) + { + + } + + virtual public void Setup(ByteBuffer buffer) + { + int cnt; + + cnt = buffer.ReadShort(); + fromPage = new string[cnt]; + for (int i = 0; i < cnt; i++) + fromPage[i] = buffer.ReadS(); + + cnt = buffer.ReadShort(); + toPage = new string[cnt]; + for (int i = 0; i < cnt; i++) + toPage[i] = buffer.ReadS(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs.meta new file mode 100644 index 0000000..3889cd1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Action/ControllerAction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d6fb1eb3d57827b4bb09eddfa5c76137 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs new file mode 100644 index 0000000..cf15661 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs @@ -0,0 +1,52 @@ +using FairyGUI.Utils; + +namespace FairyGUI +{ + public class PlayTransitionAction : ControllerAction + { + public string transitionName; + public int playTimes; + public float delay; + public bool stopOnExit; + + private Transition _currentTransition; + + public PlayTransitionAction() + { + playTimes = 1; + delay = 0; + } + + override protected void Enter(Controller controller) + { + Transition trans = controller.parent.GetTransition(transitionName); + if (trans != null) + { + if (_currentTransition != null && _currentTransition.playing) + trans.ChangePlayTimes(playTimes); + else + trans.Play(playTimes, delay, null); + _currentTransition = trans; + } + } + + override protected void Leave(Controller controller) + { + if (stopOnExit && _currentTransition != null) + { + _currentTransition.Stop(); + _currentTransition = null; + } + } + + override public void Setup(ByteBuffer buffer) + { + base.Setup(buffer); + + transitionName = buffer.ReadS(); + playTimes = buffer.ReadInt(); + delay = buffer.ReadFloat(); + stopOnExit = buffer.ReadBool(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs.meta new file mode 100644 index 0000000..36e302f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Action/PlayTransitionAction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: eac7f8de0d09f17439fb3c8e4a06090e +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs b/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs new file mode 100644 index 0000000..c415aff --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs @@ -0,0 +1,189 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + public class AsyncCreationHelper + { + public static void CreateObject(PackageItem item, UIPackage.CreateObjectCallback callback) + { + Timers.inst.StartCoroutine(_CreateObject(item, callback)); + } + + static IEnumerator _CreateObject(PackageItem item, UIPackage.CreateObjectCallback callback) + { + Stats.LatestObjectCreation = 0; + Stats.LatestGraphicsCreation = 0; + + float frameTime = UIConfig.frameTimeForAsyncUIConstruction; + + List itemList = new List(); + DisplayListItem di = new DisplayListItem(item, ObjectType.Component); + di.childCount = CollectComponentChildren(item, itemList); + itemList.Add(di); + + int cnt = itemList.Count; + List objectPool = new List(cnt); + GObject obj; + float t = Time.realtimeSinceStartup; + bool alreadyNextFrame = false; + + for (int i = 0; i < cnt; i++) + { + di = itemList[i]; + if (di.packageItem != null) + { + obj = UIObjectFactory.NewObject(di.packageItem); + objectPool.Add(obj); + + UIPackage._constructing++; + if (di.packageItem.type == PackageItemType.Component) + { + int poolStart = objectPool.Count - di.childCount - 1; + + ((GComponent)obj).ConstructFromResource(objectPool, poolStart); + + objectPool.RemoveRange(poolStart, di.childCount); + } + else + { + obj.ConstructFromResource(); + } + UIPackage._constructing--; + } + else + { + obj = UIObjectFactory.NewObject(di.type); + objectPool.Add(obj); + + if (di.type == ObjectType.List && di.listItemCount > 0) + { + int poolStart = objectPool.Count - di.listItemCount - 1; + for (int k = 0; k < di.listItemCount; k++) //把他们都放到pool里,这样GList在创建时就不需要创建对象了 + ((GList)obj).itemPool.ReturnObject(objectPool[k + poolStart]); + objectPool.RemoveRange(poolStart, di.listItemCount); + } + } + + if ((i % 5 == 0) && Time.realtimeSinceStartup - t >= frameTime) + { + yield return null; + t = Time.realtimeSinceStartup; + alreadyNextFrame = true; + } + } + + if (!alreadyNextFrame) //强制至至少下一帧才调用callback,避免调用者逻辑出错 + yield return null; + + callback(objectPool[0]); + } + + /// + /// 收集创建目标对象所需的所有类型信息 + /// + /// + /// + static int CollectComponentChildren(PackageItem item, List list) + { + ByteBuffer buffer = item.rawData; + buffer.Seek(0, 2); + + int dcnt = buffer.ReadShort(); + DisplayListItem di; + PackageItem pi; + for (int i = 0; i < dcnt; i++) + { + int dataLen = buffer.ReadShort(); + int curPos = buffer.position; + + buffer.Seek(curPos, 0); + + ObjectType type = (ObjectType)buffer.ReadByte(); + string src = buffer.ReadS(); + string pkgId = buffer.ReadS(); + + buffer.position = curPos; + + if (src != null) + { + UIPackage pkg; + if (pkgId != null) + pkg = UIPackage.GetById(pkgId); + else + pkg = item.owner; + + pi = pkg != null ? pkg.GetItem(src) : null; + di = new DisplayListItem(pi, type); + + if (pi != null && pi.type == PackageItemType.Component) + di.childCount = CollectComponentChildren(pi, list); + } + else + { + di = new DisplayListItem(null, type); + if (type == ObjectType.List) //list + di.listItemCount = CollectListChildren(buffer, list); + } + + list.Add(di); + buffer.position = curPos + dataLen; + } + + return dcnt; + } + + static int CollectListChildren(ByteBuffer buffer, List list) + { + buffer.Seek(buffer.position, 8); + + string defaultItem = buffer.ReadS(); + int listItemCount = 0; + int itemCount = buffer.ReadShort(); + for (int i = 0; i < itemCount; i++) + { + int nextPos = buffer.ReadShort(); + nextPos += buffer.position; + + string url = buffer.ReadS(); + if (url == null) + url = defaultItem; + if (!string.IsNullOrEmpty(url)) + { + PackageItem pi = UIPackage.GetItemByURL(url); + if (pi != null) + { + DisplayListItem di = new DisplayListItem(pi, pi.objectType); + if (pi.type == PackageItemType.Component) + di.childCount = CollectComponentChildren(pi, list); + + list.Add(di); + listItemCount++; + } + } + buffer.position = nextPos; + } + + return listItemCount; + } + + /// + /// + /// + class DisplayListItem + { + public PackageItem packageItem; + public ObjectType type; + public int childCount; + public int listItemCount; + + public DisplayListItem(PackageItem pi, ObjectType type) + { + this.packageItem = pi; + this.type = type; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs.meta new file mode 100644 index 0000000..b83a2c0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/AsyncCreationHelper.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 99d38995f0d185d4eb694a7728219c01 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs new file mode 100644 index 0000000..039942a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs @@ -0,0 +1,440 @@ +using System.Collections.Generic; +using FairyGUI.Utils; +using System; + +namespace FairyGUI +{ + /// + /// Controller class. + /// 控制器类。控制器的创建和设计需通过编辑器完成,不建议使用代码创建。 + /// 最常用的方法是通过selectedIndex获得或改变控制器的活动页面。如果要获得控制器页面改变的通知,使用onChanged事件。 + /// + public class Controller : EventDispatcher + { + /// + /// Name of the controller + /// 控制器名称。 + /// + public string name; + + internal GComponent parent; + internal bool autoRadioGroupDepth; + internal bool changing; + + int _selectedIndex; + int _previousIndex; + List _pageIds; + List _pageNames; + List _actions; + + EventListener _onChanged; + + static uint _nextPageId; + + public Controller() + { + _pageIds = new List(); + _pageNames = new List(); + _selectedIndex = -1; + _previousIndex = -1; + } + + public void Dispose() + { + RemoveEventListeners(); + } + + + /// + /// When controller page changed. + /// 当控制器活动页面改变时,此事件被触发。 + /// + public EventListener onChanged + { + get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } + } + + /// + /// Current page index. + /// 获得或设置当前活动页面索引。 + /// + public int selectedIndex + { + get + { + return _selectedIndex; + } + set + { + if (_selectedIndex != value) + { + if (value > _pageIds.Count - 1) + throw new IndexOutOfRangeException("" + value); + + changing = true; + + _previousIndex = _selectedIndex; + _selectedIndex = value; + parent.ApplyController(this); + + DispatchEvent("onChanged", null); + + changing = false; + } + } + } + + /// + /// Set current page index, no onChanged event. + /// 通过索引设置当前活动页面,和selectedIndex的区别在于,这个方法不会触发onChanged事件。 + /// + /// Page index + public void SetSelectedIndex(int value) + { + if (_selectedIndex != value) + { + if (value > _pageIds.Count - 1) + throw new IndexOutOfRangeException("" + value); + + changing = true; + _previousIndex = _selectedIndex; + _selectedIndex = value; + parent.ApplyController(this); + changing = false; + } + } + + /// + /// Set current page by name, no onChanged event. + /// 通过页面名称设置当前活动页面,和selectedPage的区别在于,这个方法不会触发onChanged事件。 + /// + /// Page name + public void SetSelectedPage(string value) + { + int i = _pageNames.IndexOf(value); + if (i == -1) + i = 0; + this.SetSelectedIndex(i); + } + + /// + /// Current page name. + /// 获得当前活动页面名称 + /// + public string selectedPage + { + get + { + if (_selectedIndex == -1) + return null; + else + return _pageNames[_selectedIndex]; + } + set + { + int i = _pageNames.IndexOf(value); + if (i == -1) + i = 0; + this.selectedIndex = i; + } + } + + [Obsolete("Use previousIndex")] + public int previsousIndex + { + get { return _previousIndex; } + } + + /// + /// Previouse page index. + /// 获得上次活动页面索引 + /// + public int previousIndex + { + get { return _previousIndex; } + } + + /// + /// Previous page name. + /// 获得上次活动页面名称。 + /// + public string previousPage + { + get + { + if (_previousIndex == -1) + return null; + else + return _pageNames[_previousIndex]; + } + } + + /// + /// Page count of this controller. + /// 获得页面数量。 + /// + public int pageCount + { + get { return _pageIds.Count; } + } + + /// + /// Get page name by an index. + /// 通过页面索引获得页面名称。 + /// + /// Page index + /// Page Name + public string GetPageName(int index) + { + return _pageNames[index]; + } + + /// + /// Get page id by an index. + /// 通过页面索引获得页面id。 + /// + /// Page index + /// Page Id + public string GetPageId(int index) + { + return _pageIds[index]; + } + + /// + /// Get page id by name + /// + /// + /// + public string GetPageIdByName(string aName) + { + int i = _pageNames.IndexOf(aName); + if (i != -1) + return _pageIds[i]; + else + return null; + } + + /// + /// Add a new page to this controller. + /// + /// Page name + public void AddPage(string name) + { + if (name == null) + name = string.Empty; + + AddPageAt(name, _pageIds.Count); + } + + /// + /// Add a new page to this controller at a certain index. + /// + /// Page name + /// Insert position + public void AddPageAt(string name, int index) + { + string nid = "_" + (_nextPageId++); + if (index == _pageIds.Count) + { + _pageIds.Add(nid); + _pageNames.Add(name); + } + else + { + _pageIds.Insert(index, nid); + _pageNames.Insert(index, name); + } + } + + /// + /// Remove a page. + /// + /// Page name + public void RemovePage(string name) + { + int i = _pageNames.IndexOf(name); + if (i != -1) + { + _pageIds.RemoveAt(i); + _pageNames.RemoveAt(i); + if (_selectedIndex >= _pageIds.Count) + this.selectedIndex = _selectedIndex - 1; + else + parent.ApplyController(this); + } + } + + /// + /// Removes a page at a certain index. + /// + /// + public void RemovePageAt(int index) + { + _pageIds.RemoveAt(index); + _pageNames.RemoveAt(index); + if (_selectedIndex >= _pageIds.Count) + this.selectedIndex = _selectedIndex - 1; + else + parent.ApplyController(this); + } + + /// + /// Remove all pages. + /// + public void ClearPages() + { + _pageIds.Clear(); + _pageNames.Clear(); + if (_selectedIndex != -1) + this.selectedIndex = -1; + else + parent.ApplyController(this); + } + + /// + /// Check if the controller has a page. + /// + /// Page name. + /// + public bool HasPage(string aName) + { + return _pageNames.IndexOf(aName) != -1; + } + + internal int GetPageIndexById(string aId) + { + return _pageIds.IndexOf(aId); + } + + internal string GetPageNameById(string aId) + { + int i = _pageIds.IndexOf(aId); + if (i != -1) + return _pageNames[i]; + else + return null; + } + + internal string selectedPageId + { + get + { + if (_selectedIndex == -1) + return string.Empty; + else + return _pageIds[_selectedIndex]; + } + set + { + int i = _pageIds.IndexOf(value); + if (i != -1) + this.selectedIndex = i; + } + } + + internal string oppositePageId + { + set + { + int i = _pageIds.IndexOf(value); + if (i > 0) + this.selectedIndex = 0; + else if (_pageIds.Count > 1) + this.selectedIndex = 1; + } + } + + internal string previousPageId + { + get + { + if (_previousIndex == -1) + return null; + else + return _pageIds[_previousIndex]; + } + } + + public void RunActions() + { + if (_actions != null) + { + int cnt = _actions.Count; + for (int i = 0; i < cnt; i++) + { + _actions[i].Run(this, previousPageId, selectedPageId); + } + } + } + + public void Setup(ByteBuffer buffer) + { + int beginPos = buffer.position; + buffer.Seek(beginPos, 0); + + name = buffer.ReadS(); + autoRadioGroupDepth = buffer.ReadBool(); + + buffer.Seek(beginPos, 1); + + int cnt = buffer.ReadShort(); + _pageIds.Capacity = cnt; + _pageNames.Capacity = cnt; + for (int i = 0; i < cnt; i++) + { + _pageIds.Add(buffer.ReadS()); + _pageNames.Add(buffer.ReadS()); + } + + int homePageIndex = 0; + if (buffer.version >= 2) + { + int homePageType = buffer.ReadByte(); + switch (homePageType) + { + case 1: + homePageIndex = buffer.ReadShort(); + break; + + case 2: + homePageIndex = _pageNames.IndexOf(UIPackage.branch); + if (homePageIndex == -1) + homePageIndex = 0; + break; + + case 3: + homePageIndex = _pageNames.IndexOf(UIPackage.GetVar(buffer.ReadS())); + if (homePageIndex == -1) + homePageIndex = 0; + break; + } + } + + buffer.Seek(beginPos, 2); + + cnt = buffer.ReadShort(); + if (cnt > 0) + { + if (_actions == null) + _actions = new List(cnt); + + for (int i = 0; i < cnt; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + ControllerAction action = ControllerAction.CreateAction((ControllerAction.ActionType)buffer.ReadByte()); + action.Setup(buffer); + _actions.Add(action); + + buffer.position = nextPos; + } + } + + if (parent != null && _pageIds.Count > 0) + _selectedIndex = homePageIndex; + else + _selectedIndex = -1; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs.meta new file mode 100644 index 0000000..ed84d14 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Controller.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7a032426f9564db4a95c1c5a513bcd12 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs b/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs new file mode 100644 index 0000000..2d4c00a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// Helper for drag and drop. + /// 这是一个提供特殊拖放功能的功能类。与GObject.draggable不同,拖动开始后,他使用一个替代的图标作为拖动对象。 + /// 当玩家释放鼠标/手指,目标组件会发出一个onDrop事件。 + /// + public class DragDropManager + { + private GLoader _agent; + private object _sourceData; + private GObject _source; + + private static DragDropManager _inst; + public static DragDropManager inst + { + get + { + if (_inst == null) + _inst = new DragDropManager(); + return _inst; + } + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + _inst = null; + } +#endif + public DragDropManager() + { + _agent = (GLoader)UIObjectFactory.NewObject(ObjectType.Loader); + _agent.gameObjectName = "DragDropAgent"; + _agent.SetHome(GRoot.inst); + _agent.touchable = false;//important + _agent.draggable = true; + _agent.SetSize(100, 100); + _agent.SetPivot(0.5f, 0.5f, true); + _agent.align = AlignType.Center; + _agent.verticalAlign = VertAlignType.Middle; + _agent.sortingOrder = int.MaxValue; + _agent.onDragEnd.Add(__dragEnd); + } + + /// + /// Loader object for real dragging. + /// 用于实际拖动的Loader对象。你可以根据实际情况设置loader的大小,对齐等。 + /// + public GLoader dragAgent + { + get { return _agent; } + } + + /// + /// Is dragging? + /// 返回当前是否正在拖动。 + /// + public bool dragging + { + get { return _agent.parent != null; } + } + + /// + /// Start dragging. + /// 开始拖动。 + /// + /// Source object. This is the object which initiated the dragging. + /// Icon to be used as the dragging sign. + /// Custom data. You can get it in the onDrop event data. + /// Copy the touchId from InputEvent to here, if has one. + public void StartDrag(GObject source, string icon, object sourceData, int touchPointID = -1) + { + if (_agent.parent != null) + return; + + _sourceData = sourceData; + _source = source; + _agent.url = icon; + GRoot.inst.AddChild(_agent); + _agent.xy = GRoot.inst.GlobalToLocal(Stage.inst.GetTouchPosition(touchPointID)); + _agent.StartDrag(touchPointID); + } + + /// + /// Cancel dragging. + /// 取消拖动。 + /// + public void Cancel() + { + if (_agent.parent != null) + { + _agent.StopDrag(); + GRoot.inst.RemoveChild(_agent); + _sourceData = null; + } + } + + private void __dragEnd(EventContext evt) + { + if (_agent.parent == null) //cancelled + return; + + GRoot.inst.RemoveChild(_agent); + + object sourceData = _sourceData; + GObject source = _source; + _sourceData = null; + _source = null; + + GObject obj = GRoot.inst.touchTarget; + while (obj != null) + { + if (obj.hasEventListeners("onDrop")) + { + obj.RequestFocus(); + obj.DispatchEvent("onDrop", sourceData, source); + return; + } + obj = obj.parent; + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs.meta new file mode 100644 index 0000000..d09fa30 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/DragDropManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: fb013a6e64663c34694529d92a620777 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs b/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs new file mode 100644 index 0000000..18a7ce2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public interface EMRenderTarget + { + int EM_sortingOrder { get; } + + void EM_BeforeUpdate(); + void EM_Update(UpdateContext context); + void EM_Reload(); + } + + /// + /// 这是一个在编辑状态下渲染UI的功能类。EM=Edit Mode + /// + public class EMRenderSupport + { + /// + /// + /// + public static bool orderChanged; + + static UpdateContext _updateContext; + static List _targets = new List(); + + /// + /// + /// + public static bool packageListReady { get; private set; } + + /// + /// + /// + public static bool hasTarget + { + get { return _targets.Count > 0; } + } + + /// + /// + /// + /// + public static void Add(EMRenderTarget value) + { + if (!_targets.Contains(value)) + _targets.Add(value); + orderChanged = true; + } + + /// + /// + /// + /// + public static void Remove(EMRenderTarget value) + { + _targets.Remove(value); + } + + /// + /// 由StageCamera调用 + /// + public static void Update() + { + if (Application.isPlaying) + return; + + if (_updateContext == null) + _updateContext = new UpdateContext(); + + if (orderChanged) + { + _targets.Sort(CompareDepth); + orderChanged = false; + } + + int cnt = _targets.Count; + for (int i = 0; i < cnt; i++) + { + EMRenderTarget panel = _targets[i]; + panel.EM_BeforeUpdate(); + } + + if (packageListReady) + { + _updateContext.Begin(); + for (int i = 0; i < cnt; i++) + { + EMRenderTarget panel = _targets[i]; + panel.EM_Update(_updateContext); + } + _updateContext.End(); + } + } + + /// + /// 当发生二进制重载时,或用户点击刷新菜单 + /// + public static void Reload() + { + if (Application.isPlaying) + return; + + UIConfig.ClearResourceRefs(); +#if UNITY_2023_2_OR_NEWER + UIConfig[] configs = GameObject.FindObjectsByType(FindObjectsSortMode.None); +#else + UIConfig[] configs = GameObject.FindObjectsOfType(); +#endif + foreach (UIConfig config in configs) + config.Load(); + + packageListReady = true; + + int cnt = _targets.Count; + for (int i = 0; i < cnt; i++) + { + EMRenderTarget panel = _targets[i]; + panel.EM_Reload(); + } + } + + static int CompareDepth(EMRenderTarget c1, EMRenderTarget c2) + { + return c1.EM_sortingOrder - c2.EM_sortingOrder; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs.meta new file mode 100644 index 0000000..f0cb7ec --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/EMRenderSupport.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0ea7d5d9d5c232d4f9a312870329cbd2 +timeCreated: 1464535178 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs b/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs new file mode 100644 index 0000000..629a44e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs @@ -0,0 +1,304 @@ +namespace FairyGUI +{ + public enum PackageItemType + { + Image, + MovieClip, + Sound, + Component, + Atlas, + Font, + Swf, + Misc, + Unknown, + Spine, + DragoneBones + } + + public enum ObjectType + { + Image, + MovieClip, + Swf, + Graph, + Loader, + Group, + Text, + RichText, + InputText, + Component, + List, + Label, + Button, + ComboBox, + ProgressBar, + Slider, + ScrollBar, + Tree, + Loader3D + } + + public enum AlignType + { + Left, + Center, + Right + } + + public enum VertAlignType + { + Top, + Middle, + Bottom + } + + public enum OverflowType + { + Visible, + Hidden, + Scroll + } + + public enum FillType + { + None, + Scale, + ScaleMatchHeight, + ScaleMatchWidth, + ScaleFree, + ScaleNoBorder + } + + public enum AutoSizeType + { + None, + Both, + Height, + Shrink, + Ellipsis + } + + public enum ScrollType + { + Horizontal, + Vertical, + Both + } + + public enum ScrollBarDisplayType + { + Default, + Visible, + Auto, + Hidden + } + + public enum RelationType + { + Left_Left, + Left_Center, + Left_Right, + Center_Center, + Right_Left, + Right_Center, + Right_Right, + + Top_Top, + Top_Middle, + Top_Bottom, + Middle_Middle, + Bottom_Top, + Bottom_Middle, + Bottom_Bottom, + + Width, + Height, + + LeftExt_Left, + LeftExt_Right, + RightExt_Left, + RightExt_Right, + TopExt_Top, + TopExt_Bottom, + BottomExt_Top, + BottomExt_Bottom, + + Size + } + + public enum ListLayoutType + { + SingleColumn, + SingleRow, + FlowHorizontal, + FlowVertical, + Pagination + } + + public enum ListSelectionMode + { + Single, + Multiple, + Multiple_SingleClick, + None + } + + public enum ProgressTitleType + { + Percent, + ValueAndMax, + Value, + Max + } + + public enum ButtonMode + { + Common, + Check, + Radio + } + + public enum TransitionActionType + { + XY, + Size, + Scale, + Pivot, + Alpha, + Rotation, + Color, + Animation, + Visible, + Sound, + Transition, + Shake, + ColorFilter, + Skew, + Text, + Icon, + Unknown + } + + public enum GroupLayoutType + { + None, + Horizontal, + Vertical + } + + public enum ChildrenRenderOrder + { + Ascent, + Descent, + Arch, + } + + public enum PopupDirection + { + Auto, + Up, + Down + } + + /// + /// + /// + public enum FlipType + { + None, + Horizontal, + Vertical, + Both + } + + /// + /// + /// + public enum FillMethod + { + None = 0, + + /// + /// The Image will be filled Horizontally + /// + Horizontal = 1, + + /// + /// The Image will be filled Vertically. + /// + Vertical = 2, + + /// + /// The Image will be filled Radially with the radial center in one of the corners. + /// + Radial90 = 3, + + /// + /// The Image will be filled Radially with the radial center in one of the edges. + /// + Radial180 = 4, + + /// + /// The Image will be filled Radially with the radial center at the center. + /// + Radial360 = 5, + } + + /// + /// + /// + public enum OriginHorizontal + { + Left, + Right, + } + + /// + /// + /// + public enum OriginVertical + { + Top, + Bottom + } + + /// + /// + /// + public enum Origin90 + { + TopLeft, + TopRight, + BottomLeft, + BottomRight + } + + /// + /// + /// + public enum Origin180 + { + Top, + Bottom, + Left, + Right + } + + /// + /// + /// + public enum Origin360 + { + Top, + Bottom, + Left, + Right + } + + public enum FocusRule + { + NotFocusable, + Focusable, + NavigationBase + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs.meta new file mode 100644 index 0000000..f04e809 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/FieldTypes.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1d03a824e0fdd8a48a0ad6173b4593e0 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs new file mode 100644 index 0000000..1401912 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs @@ -0,0 +1,657 @@ +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GButton class. + /// + public class GButton : GComponent, IColorGear + { + /// + /// Play sound when button is clicked. + /// + public NAudioClip sound; + + /// + /// Volume of the click sound. (0-1) + /// + public float soundVolumeScale; + + /// + /// For radio or checkbox. if false, the button will not change selected status on click. Default is true. + /// 如果为true,对于单选和多选按钮,当玩家点击时,按钮会自动切换状态。设置为false,则不会。默认为true。 + /// + public bool changeStateOnClick; + + /// + /// Show a popup on click. + /// 可以为按钮设置一个关联的组件,当按钮被点击时,此组件被自动弹出。 + /// + public GObject linkedPopup; + + protected GObject _titleObject; + protected GObject _iconObject; + protected Controller _relatedController; + protected string _relatedPageId; + + ButtonMode _mode; + bool _selected; + string _title; + string _icon; + string _selectedTitle; + string _selectedIcon; + Controller _buttonController; + int _downEffect; + float _downEffectValue; + bool _downScaled; + + bool _down; + bool _over; + + EventListener _onChanged; + + public const string UP = "up"; + public const string DOWN = "down"; + public const string OVER = "over"; + public const string SELECTED_OVER = "selectedOver"; + public const string DISABLED = "disabled"; + public const string SELECTED_DISABLED = "selectedDisabled"; + + public GButton() + { + sound = UIConfig.buttonSound; + soundVolumeScale = UIConfig.buttonSoundVolumeScale; + changeStateOnClick = true; + _downEffectValue = 0.8f; + _title = string.Empty; + } + + /// + /// Dispatched when the button status was changed. + /// 如果为单选或多选按钮,当按钮的选中状态发生改变时,此事件触发。 + /// + public EventListener onChanged + { + get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } + } + + /// + /// Icon of the button. + /// + override public string icon + { + get + { + return _icon; + } + set + { + _icon = value; + value = (_selected && _selectedIcon != null) ? _selectedIcon : _icon; + if (_iconObject != null) + _iconObject.icon = value; + UpdateGear(7); + } + } + + /// + /// Title of the button + /// + public string title + { + get + { + return _title; + } + set + { + _title = value; + if (_titleObject != null) + _titleObject.text = (_selected && _selectedTitle != null) ? _selectedTitle : _title; + UpdateGear(6); + } + } + + /// + /// Same of the title. + /// + override public string text + { + get { return this.title; } + set { this.title = value; } + } + + /// + /// Icon value on selected status. + /// + public string selectedIcon + { + get + { + return _selectedIcon; + } + set + { + _selectedIcon = value; + value = (_selected && _selectedIcon != null) ? _selectedIcon : _icon; + if (_iconObject != null) + _iconObject.icon = value; + } + } + + /// + /// Title value on selected status. + /// + public string selectedTitle + { + get + { + return _selectedTitle; + } + set + { + _selectedTitle = value; + if (_titleObject != null) + _titleObject.text = (_selected && _selectedTitle != null) ? _selectedTitle : _title; + } + } + + /// + /// Title color. + /// + public Color titleColor + { + get + { + GTextField tf = GetTextField(); + if (tf != null) + return tf.color; + else + return Color.black; + } + set + { + GTextField tf = GetTextField(); + if (tf != null) + { + tf.color = value; + UpdateGear(4); + } + } + } + + /// + /// + /// + public Color color + { + get { return this.titleColor; } + set { this.titleColor = value; } + } + + /// + /// + /// + public int titleFontSize + { + get + { + GTextField tf = GetTextField(); + if (tf != null) + return tf.textFormat.size; + else + return 0; + } + set + { + GTextField tf = GetTextField(); + if (tf != null) + { + TextFormat format = tf.textFormat; + format.size = value; + tf.textFormat = format; + } + } + } + + /// + /// If the button is in selected status. + /// + public bool selected + { + get + { + return _selected; + } + + set + { + if (_mode == ButtonMode.Common) + return; + + if (_selected != value) + { + _selected = value; + SetCurrentState(); + if (_selectedTitle != null && _titleObject != null) + _titleObject.text = _selected ? _selectedTitle : _title; + if (_selectedIcon != null) + { + string str = _selected ? _selectedIcon : _icon; + if (_iconObject != null) + _iconObject.icon = str; + } + if (_relatedController != null + && parent != null + && !parent._buildingDisplayList) + { + if (_selected) + { + _relatedController.selectedPageId = _relatedPageId; + if (_relatedController.autoRadioGroupDepth) + parent.AdjustRadioGroupDepth(this, _relatedController); + } + else if (_mode == ButtonMode.Check && _relatedController.selectedPageId == _relatedPageId) + _relatedController.oppositePageId = _relatedPageId; + } + } + + } + } + + /// + /// Button mode. + /// + /// + public ButtonMode mode + { + get + { + return _mode; + } + set + { + if (_mode != value) + { + if (value == ButtonMode.Common) + this.selected = false; + _mode = value; + } + } + } + + /// + /// A controller is connected to this button, the activate page of this controller will change while the button status changed. + /// 对应编辑器中的单选控制器。 + /// + public Controller relatedController + { + get + { + return _relatedController; + } + set + { + if (value != _relatedController) + { + _relatedController = value; + _relatedPageId = null; + } + } + } + + /// + /// + /// + public string relatedPageId + { + get + { + return _relatedPageId; + } + set + { + _relatedPageId = value; + } + } + + /// + /// Simulates a click on this button. + /// 模拟点击这个按钮。 + /// + /// If the down effect will simulate too. + public void FireClick(bool downEffect, bool clickCall = false) + { + if (downEffect && _mode == ButtonMode.Common) + { + SetState(OVER); + + Timers.inst.Add(0.1f, 1, (object param) => { SetState(DOWN); }); + Timers.inst.Add(0.2f, 1, + (object param) => + { + SetState(UP); + if (clickCall) + { + onClick.Call(); + } + } + ); + } + else + { + if (clickCall) + { + onClick.Call(); + } + } + __click(); + } + + /// + /// + /// + /// + public GTextField GetTextField() + { + if (_titleObject is GTextField) + return (GTextField)_titleObject; + else if (_titleObject is GLabel) + return ((GLabel)_titleObject).GetTextField(); + else if (_titleObject is GButton) + return ((GButton)_titleObject).GetTextField(); + else + return null; + } + + protected void SetState(string val) + { + if (_buttonController != null) + _buttonController.selectedPage = val; + + if (_downEffect == 1) + { + int cnt = this.numChildren; + if (val == DOWN || val == SELECTED_OVER || val == SELECTED_DISABLED) + { + Color color = new Color(_downEffectValue, _downEffectValue, _downEffectValue); + for (int i = 0; i < cnt; i++) + { + GObject obj = this.GetChildAt(i); + if ((obj is IColorGear) && !(obj is GTextField)) + ((IColorGear)obj).color = color; + } + } + else + { + for (int i = 0; i < cnt; i++) + { + GObject obj = this.GetChildAt(i); + if ((obj is IColorGear) && !(obj is GTextField)) + ((IColorGear)obj).color = Color.white; + } + } + } + else if (_downEffect == 2) + { + if (val == DOWN || val == SELECTED_OVER || val == SELECTED_DISABLED) + { + if (!_downScaled) + { + _downScaled = true; + SetScale(this.scaleX * _downEffectValue, this.scaleY * _downEffectValue); + } + } + else + { + if (_downScaled) + { + _downScaled = false; + SetScale(this.scaleX / _downEffectValue, this.scaleY / _downEffectValue); + } + } + } + } + + protected void SetCurrentState() + { + if (this.grayed && _buttonController != null && _buttonController.HasPage(DISABLED)) + { + if (_selected) + SetState(SELECTED_DISABLED); + else + SetState(DISABLED); + } + else + { + if (_selected) + SetState(_over ? SELECTED_OVER : DOWN); + else + SetState(_over ? OVER : UP); + } + } + + override public void HandleControllerChanged(Controller c) + { + base.HandleControllerChanged(c); + + if (_relatedController == c) + this.selected = _relatedPageId == c.selectedPageId; + } + + override protected void HandleGrayedChanged() + { + if (_buttonController != null && _buttonController.HasPage(DISABLED)) + { + if (this.grayed) + { + if (_selected) + SetState(SELECTED_DISABLED); + else + SetState(DISABLED); + } + else + { + if (_selected) + SetState(DOWN); + else + SetState(UP); + } + } + else + base.HandleGrayedChanged(); + } + + override protected void ConstructExtension(ByteBuffer buffer) + { + buffer.Seek(0, 6); + + _mode = (ButtonMode)buffer.ReadByte(); + string str = buffer.ReadS(); + if (str != null) + sound = UIPackage.GetItemAssetByURL(str) as NAudioClip; + soundVolumeScale = buffer.ReadFloat(); + _downEffect = buffer.ReadByte(); + _downEffectValue = buffer.ReadFloat(); + if (_downEffect == 2) + SetPivot(0.5f, 0.5f, this.pivotAsAnchor); + + _buttonController = GetController("button"); + _titleObject = GetChild("title"); + _iconObject = GetChild("icon"); + if (_titleObject != null) + _title = _titleObject.text; + if (_iconObject != null) + _icon = _iconObject.icon; + + if (_mode == ButtonMode.Common) + SetState(UP); + + displayObject.onRollOver.Add(__rollover); + displayObject.onRollOut.Add(__rollout); + displayObject.onTouchBegin.Add(__touchBegin); + displayObject.onTouchEnd.Add(__touchEnd); + displayObject.onRemovedFromStage.Add(__removedFromStage); + displayObject.onClick.Add(__click); + } + + override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_AfterAdd(buffer, beginPos); + + if (!buffer.Seek(beginPos, 6)) + return; + + if ((ObjectType)buffer.ReadByte() != packageItem.objectType) + return; + + string str; + + str = buffer.ReadS(); + if (str != null) + this.title = str; + str = buffer.ReadS(); + if (str != null) + this.selectedTitle = str; + str = buffer.ReadS(); + if (str != null) + this.icon = str; + str = buffer.ReadS(); + if (str != null) + this.selectedIcon = str; + if (buffer.ReadBool()) + this.titleColor = buffer.ReadColor(); + int iv = buffer.ReadInt(); + if (iv != 0) + this.titleFontSize = iv; + iv = buffer.ReadShort(); + if (iv >= 0) + _relatedController = parent.GetControllerAt(iv); + _relatedPageId = buffer.ReadS(); + + str = buffer.ReadS(); + if (str != null) + sound = UIPackage.GetItemAssetByURL(str) as NAudioClip; + if (buffer.ReadBool()) + soundVolumeScale = buffer.ReadFloat(); + + this.selected = buffer.ReadBool(); + } + + private void __rollover() + { + if (_buttonController == null || !_buttonController.HasPage(OVER)) + return; + + _over = true; + if (_down) + return; + + if (this.grayed && _buttonController.HasPage(DISABLED)) + return; + + SetState(_selected ? SELECTED_OVER : OVER); + } + + private void __rollout() + { + if (_buttonController == null || !_buttonController.HasPage(OVER)) + return; + + _over = false; + if (_down) + return; + + if (this.grayed && _buttonController.HasPage(DISABLED)) + return; + + SetState(_selected ? DOWN : UP); + } + + private void __touchBegin(EventContext context) + { + if (context.inputEvent.button != 0) + return; + + _down = true; + context.CaptureTouch(); + + if (_mode == ButtonMode.Common) + { + if (this.grayed && _buttonController != null && _buttonController.HasPage(DISABLED)) + SetState(SELECTED_DISABLED); + else + SetState(DOWN); + } + + if (linkedPopup != null) + { + if (linkedPopup is Window) + ((Window)linkedPopup).ToggleStatus(); + else + this.root.TogglePopup(linkedPopup, this); + } + } + + private void __touchEnd() + { + if (_down) + { + _down = false; + if (_mode == ButtonMode.Common) + { + if (this.grayed && _buttonController != null && _buttonController.HasPage(DISABLED)) + SetState(DISABLED); + else if (_over) + SetState(OVER); + else + SetState(UP); + } + else + { + if (!_over + && _buttonController != null + && (_buttonController.selectedPage == OVER || _buttonController.selectedPage == SELECTED_OVER)) + { + SetCurrentState(); + } + } + } + } + + private void __removedFromStage() + { + if (_over) + __rollout(); + } + + private void __click() + { + if (sound != null && sound.nativeClip != null) + Stage.inst.PlayOneShotSound(sound.nativeClip, soundVolumeScale); + + if (_mode == ButtonMode.Check) + { + if (changeStateOnClick) + { + this.selected = !_selected; + DispatchEvent("onChanged", null); + } + } + else if (_mode == ButtonMode.Radio) + { + if (changeStateOnClick && !_selected) + { + this.selected = true; + DispatchEvent("onChanged", null); + } + } + else + { + if (_relatedController != null) + _relatedController.selectedPageId = _relatedPageId; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs.meta new file mode 100644 index 0000000..dff56e5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GButton.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4e5e996dd06bc77458af09a2465efb6d +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs new file mode 100644 index 0000000..40b9fdd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs @@ -0,0 +1,629 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GComboBox class. + /// + public class GComboBox : GComponent + { + /// + /// Visible item count of the drop down list. + /// + public int visibleItemCount; + + /// + /// + /// + public GComponent dropdown; + + /// + /// Play sound when button is clicked. + /// + public NAudioClip sound; + + /// + /// Volume of the click sound. (0-1) + /// + public float soundVolumeScale; + + protected GObject _titleObject; + protected GObject _iconObject; + protected GList _list; + + protected List _items; + protected List _icons; + protected List _values; + protected PopupDirection _popupDirection; + protected Controller _selectionController; + + bool _itemsUpdated; + int _selectedIndex; + Controller _buttonController; + + bool _down; + bool _over; + + EventListener _onChanged; + + public GComboBox() + { + visibleItemCount = UIConfig.defaultComboBoxVisibleItemCount; + _itemsUpdated = true; + _selectedIndex = -1; + _items = new List(); + _values = new List(); + _popupDirection = PopupDirection.Auto; + soundVolumeScale = 1; + } + + /// + /// Dispatched when selection was changed. + /// + public EventListener onChanged + { + get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } + } + + /// + /// Icon of the combobox. + /// + override public string icon + { + get + { + if (_iconObject != null) + return _iconObject.icon; + else + return null; + } + + set + { + if (_iconObject != null) + _iconObject.icon = value; + UpdateGear(7); + } + } + + /// + /// Title of the combobox. + /// + public string title + { + get + { + if (_titleObject != null) + return _titleObject.text; + else + return null; + } + set + { + if (_titleObject != null) + _titleObject.text = value; + UpdateGear(6); + } + } + + /// + /// Same of the title. + /// + override public string text + { + get { return this.title; } + set { this.title = value; } + } + + /// + /// Text color + /// + public Color titleColor + { + get + { + GTextField tf = GetTextField(); + if (tf != null) + return tf.color; + else + return Color.black; + } + set + { + GTextField tf = GetTextField(); + if (tf != null) + tf.color = value; + } + } + + /// + /// + /// + public int titleFontSize + { + get + { + GTextField tf = GetTextField(); + if (tf != null) + return tf.textFormat.size; + else + return 0; + } + set + { + GTextField tf = GetTextField(); + if (tf != null) + { + TextFormat format = tf.textFormat; + format.size = value; + tf.textFormat = format; + } + } + } + + /// + /// Items to build up drop down list. + /// + public string[] items + { + get + { + return _items.ToArray(); + } + set + { + _items.Clear(); + if (value != null) + _items.AddRange(value); + ApplyListChange(); + } + } + + /// + /// + /// + public string[] icons + { + get { return _icons != null ? _icons.ToArray() : null; } + set + { + this.iconList.Clear(); + if (value != null) + _icons.AddRange(value); + ApplyListChange(); + } + } + + /// + /// Values, should be same size of the items. + /// + public string[] values + { + get { return _values.ToArray(); } + set + { + _values.Clear(); + if (value != null) + _values.AddRange(value); + } + } + + /// + /// + /// + public List itemList + { + get { return _items; } + } + + /// + /// + /// + public List valueList + { + get { return _values; } + } + + /// + /// + /// + public List iconList + { + get { return _icons ?? (_icons = new List()); } + } + + /// + /// Call this method after you made changes on itemList or iconList + /// + public void ApplyListChange() + { + if (_items.Count > 0) + { + if (_selectedIndex >= _items.Count) + _selectedIndex = _items.Count - 1; + else if (_selectedIndex == -1) + _selectedIndex = 0; + + this.text = _items[_selectedIndex]; + if (_icons != null && _selectedIndex < _icons.Count) + this.icon = _icons[_selectedIndex]; + } + else + { + this.text = string.Empty; + if (_icons != null) + this.icon = null; + _selectedIndex = -1; + } + + _itemsUpdated = true; + } + + /// + /// Selected index. + /// + public int selectedIndex + { + get + { + return _selectedIndex; + } + set + { + if (_selectedIndex == value) + return; + + _selectedIndex = value; + if (_selectedIndex >= 0 && _selectedIndex < _items.Count) + { + this.text = (string)_items[_selectedIndex]; + if (_icons != null && _selectedIndex < _icons.Count) + this.icon = _icons[_selectedIndex]; + } + else + { + this.text = string.Empty; + if (_icons != null) + this.icon = null; + } + + UpdateSelectionController(); + } + } + + /// + /// + /// + public Controller selectionController + { + get { return _selectionController; } + set { _selectionController = value; } + } + + /// + /// Selected value. + /// + public string value + { + get + { + if (_selectedIndex >= 0 && _selectedIndex < _values.Count) + return _values[_selectedIndex]; + else + return null; + } + set + { + int index = _values.IndexOf(value); + if (index == -1 && value == null) + index = _values.IndexOf(string.Empty); + if (index == -1) + index = 0; + this.selectedIndex = index; + } + } + + /// + /// + /// + public PopupDirection popupDirection + { + get { return _popupDirection; } + set { _popupDirection = value; } + } + + /// + /// + /// + /// + public GTextField GetTextField() + { + if (_titleObject is GTextField) + return (GTextField)_titleObject; + else if (_titleObject is GLabel) + return ((GLabel)_titleObject).GetTextField(); + else if (_titleObject is GButton) + return ((GButton)_titleObject).GetTextField(); + else + return null; + } + + protected void SetState(string value) + { + if (_buttonController != null) + _buttonController.selectedPage = value; + } + + protected void SetCurrentState() + { + if (this.grayed && _buttonController != null && _buttonController.HasPage(GButton.DISABLED)) + SetState(GButton.DISABLED); + else if (dropdown != null && dropdown.parent != null) + SetState(GButton.DOWN); + else + SetState(_over ? GButton.OVER : GButton.UP); + } + + override protected void HandleGrayedChanged() + { + if (_buttonController != null && _buttonController.HasPage(GButton.DISABLED)) + { + if (this.grayed) + SetState(GButton.DISABLED); + else + SetState(GButton.UP); + } + else + base.HandleGrayedChanged(); + } + + override public void HandleControllerChanged(Controller c) + { + base.HandleControllerChanged(c); + + if (_selectionController == c) + this.selectedIndex = c.selectedIndex; + } + + void UpdateSelectionController() + { + if (_selectionController != null && !_selectionController.changing + && _selectedIndex < _selectionController.pageCount) + { + Controller c = _selectionController; + _selectionController = null; + c.selectedIndex = _selectedIndex; + _selectionController = c; + } + } + + public override void Dispose() + { + if (dropdown != null) + { + dropdown.Dispose(); + dropdown = null; + } + _selectionController = null; + + base.Dispose(); + } + + override protected void ConstructExtension(ByteBuffer buffer) + { + buffer.Seek(0, 6); + + _buttonController = GetController("button"); + _titleObject = GetChild("title"); + _iconObject = GetChild("icon"); + + string str = buffer.ReadS(); + if (str != null) + { + dropdown = UIPackage.CreateObjectFromURL(str) as GComponent; + if (dropdown == null) + { + Debug.LogWarning("FairyGUI: " + this.resourceURL + " should be a component."); + return; + } + + _list = dropdown.GetChild("list") as GList; + if (_list == null) + { + Debug.LogWarning("FairyGUI: " + this.resourceURL + ": should container a list component named list."); + return; + } + _list.onClickItem.Add(__clickItem); + + _list.AddRelation(dropdown, RelationType.Width); + _list.RemoveRelation(dropdown, RelationType.Height); + + dropdown.AddRelation(_list, RelationType.Height); + dropdown.RemoveRelation(_list, RelationType.Width); + + dropdown.SetHome(this); + } + + displayObject.onRollOver.Add(__rollover); + displayObject.onRollOut.Add(__rollout); + displayObject.onTouchBegin.Add(__touchBegin); + displayObject.onTouchEnd.Add(__touchEnd); + displayObject.onClick.Add(__click); + } + + override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_AfterAdd(buffer, beginPos); + + if (!buffer.Seek(beginPos, 6)) + return; + + if ((ObjectType)buffer.ReadByte() != packageItem.objectType) + return; + + string str; + int itemCount = buffer.ReadShort(); + for (int i = 0; i < itemCount; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + _items.Add(buffer.ReadS()); + _values.Add(buffer.ReadS()); + str = buffer.ReadS(); + if (str != null) + { + if (_icons == null) + _icons = new List(); + _icons.Add(str); + } + + buffer.position = nextPos; + } + + str = buffer.ReadS(); + if (str != null) + { + this.text = str; + _selectedIndex = _items.IndexOf(str); + } + else if (_items.Count > 0) + { + _selectedIndex = 0; + this.text = _items[0]; + } + else + _selectedIndex = -1; + + str = buffer.ReadS(); + if (str != null) + this.icon = str; + + if (buffer.ReadBool()) + this.titleColor = buffer.ReadColor(); + int iv = buffer.ReadInt(); + if (iv > 0) + visibleItemCount = iv; + _popupDirection = (PopupDirection)buffer.ReadByte(); + + iv = buffer.ReadShort(); + if (iv >= 0) + _selectionController = parent.GetControllerAt(iv); + + if (buffer.version >= 5) + { + str = buffer.ReadS(); + if (str != null) + sound = UIPackage.GetItemAssetByURL(str) as NAudioClip; + soundVolumeScale = buffer.ReadFloat(); + } + } + + public void UpdateDropdownList() + { + if (_itemsUpdated) + { + _itemsUpdated = false; + RenderDropdownList(); + _list.ResizeToFit(visibleItemCount); + } + } + + protected void ShowDropdown() + { + UpdateDropdownList(); + if (_list.selectionMode == ListSelectionMode.Single) + _list.selectedIndex = -1; + dropdown.width = this.width; + _list.EnsureBoundsCorrect(); //avoid flicker + + this.root.TogglePopup(dropdown, this, _popupDirection); + if (dropdown.parent != null) + { + dropdown.displayObject.onRemovedFromStage.Add(__popupWinClosed); + SetState(GButton.DOWN); + } + } + + virtual protected void RenderDropdownList() + { + _list.RemoveChildrenToPool(); + int cnt = _items.Count; + for (int i = 0; i < cnt; i++) + { + GObject item = _list.AddItemFromPool(); + item.text = _items[i]; + item.icon = (_icons != null && i < _icons.Count) ? _icons[i] : null; + item.name = i < _values.Count ? _values[i] : string.Empty; + } + } + + private void __popupWinClosed(object obj) + { + dropdown.displayObject.onRemovedFromStage.Remove(__popupWinClosed); + SetCurrentState(); + + RequestFocus(); + } + + private void __clickItem(EventContext context) + { + if (dropdown.parent is GRoot) + ((GRoot)dropdown.parent).HidePopup(dropdown); + _selectedIndex = int.MinValue; + this.selectedIndex = _list.GetChildIndex((GObject)context.data); + + DispatchEvent("onChanged", null); + } + + private void __rollover() + { + _over = true; + if (_down || dropdown != null && dropdown.parent != null) + return; + + SetCurrentState(); + } + + private void __rollout() + { + _over = false; + if (_down || dropdown != null && dropdown.parent != null) + return; + + SetCurrentState(); + } + + private void __touchBegin(EventContext context) + { + if (context.initiator is InputTextField) + return; + + _down = true; + + if (dropdown != null) + ShowDropdown(); + + context.CaptureTouch(); + } + + private void __touchEnd(EventContext context) + { + if (_down) + { + _down = false; + if (dropdown != null && dropdown.parent != null) + SetCurrentState(); + } + } + + private void __click() + { + if (sound != null && sound.nativeClip != null) + Stage.inst.PlayOneShotSound(sound.nativeClip, soundVolumeScale); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs.meta new file mode 100644 index 0000000..c753948 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GComboBox.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 65b819211c4a7ec4eb1cf17cda579377 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs new file mode 100644 index 0000000..8e2158e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs @@ -0,0 +1,1726 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; +#if FAIRYGUI_TOLUA +using LuaInterface; +#endif + +namespace FairyGUI +{ + /// + /// Component + /// + public class GComponent : GObject + { + /// + /// Root container. + /// + public Container rootContainer { get; private set; } + /// + /// Content container. If the component is not clipped, then container==rootContainer. + /// + public Container container { get; protected set; } + /// + /// ScrollPane of the component. If the component is not scrollable, the value is null. + /// + public ScrollPane scrollPane { get; private set; } + + internal List _children; + internal List _controllers; + internal List _transitions; + internal bool _buildingDisplayList; + + protected Margin _margin; + protected bool _trackBounds; + protected bool _boundsChanged; + protected ChildrenRenderOrder _childrenRenderOrder; + protected int _apexIndex; + internal Vector2 _alignOffset; + + Vector2 _clipSoftness; + int _sortingChildCount; + Action _buildDelegate; + Controller _applyingController; + + EventListener _onDrop; + + public GComponent() + { + _children = new List(); + _controllers = new List(); + _transitions = new List(); + _margin = new Margin(); + _buildDelegate = BuildNativeDisplayList; + } + + override protected void CreateDisplayObject() + { + rootContainer = new Container("GComponent"); + rootContainer.gOwner = this; + rootContainer.onUpdate += OnUpdate; + container = rootContainer; + + displayObject = rootContainer; + } + + override public void Dispose() + { + int cnt = _transitions.Count; + for (int i = 0; i < cnt; ++i) + { + Transition trans = _transitions[i]; + trans.Dispose(); + } + + cnt = _controllers.Count; + for (int i = 0; i < cnt; ++i) + { + Controller c = _controllers[i]; + c.Dispose(); + } + + if (scrollPane != null) + scrollPane.Dispose(); + + base.Dispose(); //Dispose native tree first, avoid DisplayObject.RemoveFromParent call + + cnt = _children.Count; + for (int i = cnt - 1; i >= 0; --i) + { + GObject obj = _children[i]; + obj.InternalSetParent(null); //Avoid GObject.RemoveParent call + obj.Dispose(); + } + +#if FAIRYGUI_TOLUA + if (_peerTable != null) + { + _peerTable.Dispose(); + _peerTable = null; + } +#endif + +#if FAIRYGUI_PUERTS + if (__onDispose != null) + __onDispose(); + __onConstruct = null; + __onDispose = null; +#endif + } + + /// + /// Dispatched when an object was dragged and dropped to this component. + /// + public EventListener onDrop + { + get { return _onDrop ?? (_onDrop = new EventListener(this, "onDrop")); } + } + + /// + /// Draw call optimization switch. + /// + public bool fairyBatching + { + get { return rootContainer.fairyBatching; } + set { rootContainer.fairyBatching = value; } + } + + /// + /// + /// + /// + public void InvalidateBatchingState(bool childChanged) + { + if (childChanged) + container.InvalidateBatchingState(childChanged); + else + rootContainer.InvalidateBatchingState(); + } + + /// + /// If true, mouse/touch events cannot pass through the empty area of the component. Default is true. + /// + public bool opaque + { + get { return rootContainer.opaque; } + set { rootContainer.opaque = value; } + } + + /// + /// + /// + /// + public Margin margin + { + get { return _margin; } + set + { + _margin = value; + if (rootContainer.clipRect != null && scrollPane == null) //如果scrollPane不为空,则HandleSizeChanged里面的处理会促使ScrollPane处理 + container.SetXY(_margin.left + _alignOffset.x, _margin.top + _alignOffset.y); + HandleSizeChanged(); + } + } + + /// + /// + /// + public ChildrenRenderOrder childrenRenderOrder + { + get { return _childrenRenderOrder; } + set + { + if (_childrenRenderOrder != value) + { + _childrenRenderOrder = value; + BuildNativeDisplayList(); + } + } + } + + /// + /// + /// + public int apexIndex + { + get { return _apexIndex; } + set + { + if (_apexIndex != value) + { + _apexIndex = value; + + if (_childrenRenderOrder == ChildrenRenderOrder.Arch) + BuildNativeDisplayList(); + } + } + } + + /// + /// If true, children can be navigated by TAB from first to last, and repeat + /// + public bool tabStopChildren + { + get { return rootContainer.tabStopChildren; } + set { rootContainer.tabStopChildren = value; } + } + + /// + /// Add a child to the component. It will be at the frontmost position. + /// + /// A child object + /// GObject + public GObject AddChild(GObject child) + { + AddChildAt(child, _children.Count); + return child; + } + + /// + /// Adds a child to the component at a certain index. + /// + /// A child object + /// Index + /// GObject + virtual public GObject AddChildAt(GObject child, int index) + { + if (index >= 0 && index <= _children.Count) + { + if (child.parent == this) + { + SetChildIndex(child, index); + } + else + { + child.RemoveFromParent(); + child.InternalSetParent(this); + + int cnt = _children.Count; + if (child.sortingOrder != 0) + { + _sortingChildCount++; + index = GetInsertPosForSortingChild(child); + } + else if (_sortingChildCount > 0) + { + if (index > (cnt - _sortingChildCount)) + index = cnt - _sortingChildCount; + } + + if (index == cnt) + _children.Add(child); + else + _children.Insert(index, child); + + ChildStateChanged(child); + SetBoundsChangedFlag(); + } + return child; + } + else + { + throw new Exception("Invalid child index: " + index + ">" + _children.Count); + } + } + + int GetInsertPosForSortingChild(GObject target) + { + int cnt = _children.Count; + int i; + for (i = 0; i < cnt; i++) + { + GObject child = _children[i]; + if (child == target) + continue; + + if (target.sortingOrder < child.sortingOrder) + break; + } + return i; + } + + /// + /// Removes a child from the component. If the object is not a child, nothing happens. + /// + /// A child object + /// GObject + public GObject RemoveChild(GObject child) + { + return RemoveChild(child, false); + } + + /// + /// Removes a child from the component. If the object is not a child, nothing happens. + /// + /// A child object + /// If true, the child will be disposed right away. + /// GObject + public GObject RemoveChild(GObject child, bool dispose) + { + int childIndex = _children.IndexOf(child); + if (childIndex != -1) + { + RemoveChildAt(childIndex, dispose); + } + return child; + } + + /// + /// Removes a child at a certain index. Children above the child will move down. + /// + /// Index + /// GObject + public GObject RemoveChildAt(int index) + { + return RemoveChildAt(index, false); + } + + /// + /// Removes a child at a certain index. Children above the child will move down. + /// + /// Index + /// If true, the child will be disposed right away. + /// GObject + virtual public GObject RemoveChildAt(int index, bool dispose) + { + if (index >= 0 && index < numChildren) + { + GObject child = _children[index]; + + child.InternalSetParent(null); + + if (child.sortingOrder != 0) + _sortingChildCount--; + + _children.RemoveAt(index); + child.group = null; + if (child.inContainer) + { + container.RemoveChild(child.displayObject); + if (_childrenRenderOrder == ChildrenRenderOrder.Arch) + { + UpdateContext.OnBegin -= _buildDelegate; + UpdateContext.OnBegin += _buildDelegate; + } + } + + if (dispose) + child.Dispose(); + + SetBoundsChangedFlag(); + return child; + } + else + throw new Exception("Invalid child index: " + index + ">" + numChildren); + } + + /// + /// Remove all children. + /// + public void RemoveChildren() + { + RemoveChildren(0, -1, false); + } + + /// + /// Removes a range of children from the container (endIndex included). + /// + /// Begin index. + /// End index.(Included). + /// If true, the child will be disposed right away. + public void RemoveChildren(int beginIndex, int endIndex, bool dispose) + { + if (endIndex < 0 || endIndex >= numChildren) + endIndex = numChildren - 1; + + for (int i = beginIndex; i <= endIndex; ++i) + RemoveChildAt(beginIndex, dispose); + } + + /// + /// Returns a child object at a certain index. If index out of bounds, exception raised. + /// + /// Index + /// A child object. + public GObject GetChildAt(int index) + { + if (index >= 0 && index < numChildren) + return _children[index]; + else + throw new Exception("Invalid child index: " + index + ">" + numChildren); + } + + /// + /// Returns a child object with a certain name. + /// + /// Name + /// A child object. Null if not found. + public GObject GetChild(string name) + { + int cnt = _children.Count; + for (int i = 0; i < cnt; ++i) + { + if (_children[i].name == name) + return _children[i]; + } + + return null; + } + + public GObject GetChildByPath(string path) + { + string[] arr = path.Split('.'); + int cnt = arr.Length; + GComponent gcom = this; + GObject obj = null; + for (int i = 0; i < cnt; ++i) + { + obj = gcom.GetChild(arr[i]); + if (obj == null) + break; + + if (i != cnt - 1) + { + if (!(obj is GComponent)) + { + obj = null; + break; + } + else + gcom = (GComponent)obj; + } + } + + return obj; + } + + /// + /// Returns a visible child object with a certain name. + /// + /// Name + /// A child object. Null if not found. + public GObject GetVisibleChild(string name) + { + int cnt = _children.Count; + for (int i = 0; i < cnt; ++i) + { + GObject child = _children[i]; + if (child.internalVisible && child.internalVisible2 && child.name == name) + return child; + } + + return null; + } + + /// + /// Returns a child object belong to a group with a certain name. + /// + /// A group object + /// Name + /// A child object. Null if not found. + public GObject GetChildInGroup(GGroup group, string name) + { + int cnt = _children.Count; + for (int i = 0; i < cnt; ++i) + { + GObject child = _children[i]; + if (child.group == group && child.name == name) + return child; + } + + return null; + } + + internal GObject GetChildById(string id) + { + int cnt = _children.Count; + for (int i = 0; i < cnt; ++i) + { + if (_children[i].id == id) + return _children[i]; + } + + return null; + } + + /// + /// Returns a copy of all children with an array. + /// + /// An array contains all children + public GObject[] GetChildren() + { + return _children.ToArray(); + } + + /// + /// Returns the index of a child within the container, or "-1" if it is not found. + /// + /// A child object + /// Index of the child. -1 If not found. + public int GetChildIndex(GObject child) + { + return _children.IndexOf(child); + } + + /// + /// Moves a child to a certain index. Children at and after the replaced position move up. + /// + /// A Child + /// Index + public void SetChildIndex(GObject child, int index) + { + int oldIndex = _children.IndexOf(child); + if (oldIndex == -1) + throw new ArgumentException("Not a child of this container"); + + if (child.sortingOrder != 0) //no effect + return; + + if (_sortingChildCount > 0) + { + int cnt = _children.Count; + if (index > (cnt - _sortingChildCount - 1)) + index = cnt - _sortingChildCount - 1; + } + + _SetChildIndex(child, oldIndex, index); + } + + /// + /// Moves a child to a certain position which is in front of the child previously at given index. + /// 与SetChildIndex不同的是,如果child原来在index的前面,那么child插入的位置是index-1,即保证排在原来占据index的对象的前面。 + /// + /// + /// + public int SetChildIndexBefore(GObject child, int index) + { + int oldIndex = _children.IndexOf(child); + if (oldIndex == -1) + throw new ArgumentException("Not a child of this container"); + + if (child.sortingOrder != 0) //no effect + return oldIndex; + + int cnt = _children.Count; + if (_sortingChildCount > 0) + { + if (index > (cnt - _sortingChildCount - 1)) + index = cnt - _sortingChildCount - 1; + } + + if (oldIndex < index) + return _SetChildIndex(child, oldIndex, index - 1); + else + return _SetChildIndex(child, oldIndex, index); + } + + int _SetChildIndex(GObject child, int oldIndex, int index) + { + int cnt = _children.Count; + if (index > cnt) + index = cnt; + + if (oldIndex == index) + return oldIndex; + + _children.RemoveAt(oldIndex); + if (index >= cnt) + _children.Add(child); + else + _children.Insert(index, child); + + if (child.inContainer) + { + int displayIndex = 0; + if (_childrenRenderOrder == ChildrenRenderOrder.Ascent) + { + for (int i = 0; i < index; i++) + { + GObject g = _children[i]; + if (g.inContainer) + displayIndex++; + } + container.SetChildIndex(child.displayObject, displayIndex); + } + else if (_childrenRenderOrder == ChildrenRenderOrder.Descent) + { + for (int i = cnt - 1; i > index; i--) + { + GObject g = _children[i]; + if (g.inContainer) + displayIndex++; + } + container.SetChildIndex(child.displayObject, displayIndex); + } + else + { + UpdateContext.OnBegin -= _buildDelegate; + UpdateContext.OnBegin += _buildDelegate; + } + + SetBoundsChangedFlag(); + } + + return index; + } + + /// + /// Swaps the indexes of two children. + /// + /// A child object + /// A child object + public void SwapChildren(GObject child1, GObject child2) + { + int index1 = _children.IndexOf(child1); + int index2 = _children.IndexOf(child2); + if (index1 == -1 || index2 == -1) + throw new Exception("Not a child of this container"); + SwapChildrenAt(index1, index2); + } + + /// + /// Swaps the indexes of two children. + /// + /// index of first child + /// index of second child + public void SwapChildrenAt(int index1, int index2) + { + GObject child1 = _children[index1]; + GObject child2 = _children[index2]; + + SetChildIndex(child1, index2); + SetChildIndex(child2, index1); + } + + /// + /// The number of children of this component. + /// + public int numChildren + { + get { return _children.Count; } + } + + /// + /// + /// + /// + /// + public bool IsAncestorOf(GObject obj) + { + if (obj == null) + return false; + + GComponent p = obj.parent; + while (p != null) + { + if (p == this) + return true; + + p = p.parent; + } + return false; + } + + + /// + /// + /// + /// + public void ChangeChildrenOrder(IList objs) + { + int cnt = objs.Count; + for (int i = 0; i < cnt; i++) + { + GObject obj = objs[i]; + if (obj.parent != this) + throw new Exception("Not a child of this container"); + + _children[i] = obj; + } + BuildNativeDisplayList(); + SetBoundsChangedFlag(); + } + + /// + /// Adds a controller to the container. + /// + /// Controller object + public void AddController(Controller controller) + { + _controllers.Add(controller); + controller.parent = this; + ApplyController(controller); + } + + /// + /// Returns a controller object at a certain index. + /// + /// Index + /// Controller object. + public Controller GetControllerAt(int index) + { + return _controllers[index]; + } + + /// + /// Returns a controller object with a certain name. + /// + /// Name + /// Controller object. Null if not found. + public Controller GetController(string name) + { + int cnt = _controllers.Count; + for (int i = 0; i < cnt; ++i) + { + Controller c = _controllers[i]; + if (c.name == name) + return c; + } + + return null; + } + + /// + /// Removes a controller from the container. + /// + /// Controller object. + public void RemoveController(Controller c) + { + int index = _controllers.IndexOf(c); + if (index == -1) + throw new Exception("controller not exists: " + c.name); + + c.parent = null; + _controllers.RemoveAt(index); + + int cnt = _children.Count; + for (int i = 0; i < cnt; ++i) + { + GObject child = _children[i]; + child.HandleControllerChanged(c); + } + } + + /// + /// Returns controller list. + /// + /// Controller list + public List Controllers + { + get { return _controllers; } + } + + /// + /// Returns a transition object at a certain index. + /// + /// Index + /// transition object. + public Transition GetTransitionAt(int index) + { + return _transitions[index]; + } + + /// + /// Returns a transition object at a certain name. + /// + /// Name + /// Transition Object + public Transition GetTransition(string name) + { + int cnt = _transitions.Count; + for (int i = 0; i < cnt; ++i) + { + Transition trans = _transitions[i]; + if (trans.name == name) + return trans; + } + + return null; + } + + /// + /// Returns transition list. + /// + /// Transition list + public List Transitions + { + get { return _transitions; } + } + + internal void ChildStateChanged(GObject child) + { + if (_buildingDisplayList) + return; + + int cnt = _children.Count; + + if (child is GGroup) + { + for (int i = 0; i < cnt; ++i) + { + GObject g = _children[i]; + if (g.group == child) + ChildStateChanged(g); + } + return; + } + + if (child.displayObject == null) + return; + + if (child.internalVisible) + { + if (child.displayObject.parent == null) + { + if (_childrenRenderOrder == ChildrenRenderOrder.Ascent) + { + int index = 0; + for (int i = 0; i < cnt; i++) + { + GObject g = _children[i]; + if (g == child) + break; + + if (g.displayObject != null && g.displayObject.parent != null) + index++; + } + container.AddChildAt(child.displayObject, index); + } + else if (_childrenRenderOrder == ChildrenRenderOrder.Descent) + { + int index = 0; + for (int i = cnt - 1; i >= 0; i--) + { + GObject g = _children[i]; + if (g == child) + break; + + if (g.displayObject != null && g.displayObject.parent != null) + index++; + } + container.AddChildAt(child.displayObject, index); + } + else + { + container.AddChild(child.displayObject); + + UpdateContext.OnBegin -= _buildDelegate; + UpdateContext.OnBegin += _buildDelegate; + } + } + } + else + { + if (child.displayObject.parent != null) + { + container.RemoveChild(child.displayObject); + if (_childrenRenderOrder == ChildrenRenderOrder.Arch) + { + UpdateContext.OnBegin -= _buildDelegate; + UpdateContext.OnBegin += _buildDelegate; + } + } + } + } + + void BuildNativeDisplayList() + { + if (displayObject == null || displayObject.isDisposed) + return; + + int cnt = _children.Count; + if (cnt == 0) + return; + + switch (_childrenRenderOrder) + { + case ChildrenRenderOrder.Ascent: + { + for (int i = 0; i < cnt; i++) + { + GObject child = _children[i]; + if (child.displayObject != null && child.internalVisible) + container.AddChild(child.displayObject); + } + } + break; + case ChildrenRenderOrder.Descent: + { + for (int i = cnt - 1; i >= 0; i--) + { + GObject child = _children[i]; + if (child.displayObject != null && child.internalVisible) + container.AddChild(child.displayObject); + } + } + break; + + case ChildrenRenderOrder.Arch: + { + int apex = Mathf.Clamp(_apexIndex, 0, cnt); + for (int i = 0; i < apex; i++) + { + GObject child = _children[i]; + if (child.displayObject != null && child.internalVisible) + container.AddChild(child.displayObject); + } + for (int i = cnt - 1; i >= apex; i--) + { + GObject child = _children[i]; + if (child.displayObject != null && child.internalVisible) + container.AddChild(child.displayObject); + } + } + break; + } + } + + internal void ApplyController(Controller c) + { + _applyingController = c; + int cnt = _children.Count; + for (int i = 0; i < cnt; ++i) + { + GObject child = _children[i]; + child.HandleControllerChanged(c); + } + _applyingController = null; + + c.RunActions(); + } + + void ApplyAllControllers() + { + int cnt = _controllers.Count; + for (int i = 0; i < cnt; ++i) + { + Controller controller = _controllers[i]; + ApplyController(controller); + } + } + + internal void AdjustRadioGroupDepth(GObject obj, Controller c) + { + int cnt = _children.Count; + int i; + GObject child; + int myIndex = -1, maxIndex = -1; + for (i = 0; i < cnt; i++) + { + child = _children[i]; + if (child == obj) + { + myIndex = i; + } + else if ((child is GButton) + && ((GButton)child).relatedController == c) + { + if (i > maxIndex) + maxIndex = i; + } + } + if (myIndex < maxIndex) + { + if (_applyingController != null) + _children[maxIndex].HandleControllerChanged(_applyingController); + this.SwapChildrenAt(myIndex, maxIndex); + } + } + + /// + /// If clipping softness is set, clipped containers will have soft border effect. + /// + public Vector2 clipSoftness + { + get { return _clipSoftness; } + set + { + _clipSoftness = value; + if (scrollPane != null) + scrollPane.UpdateClipSoft(); + else if (_clipSoftness.x > 0 || _clipSoftness.y > 0) + rootContainer.clipSoftness = new Vector4(value.x, value.y, value.x, value.y); + else + rootContainer.clipSoftness = null; + } + } + + /// + /// The mask of the component. + /// + public DisplayObject mask + { + get { return container.mask; } + set + { + container.mask = value; + if (value != null && value.parent != container) + container.AddChild(value); + } + } + + /// + /// + /// + public bool reversedMask + { + get { return container.reversedMask; } + set { container.reversedMask = value; } + } + + /// + /// + /// + public string baseUserData + { + get + { + ByteBuffer buffer = packageItem.rawData; + buffer.Seek(0, 4); + return buffer.ReadS(); + } + } + + /// + /// Test if a child is in view. + /// + /// A child object + /// True if in view + public bool IsChildInView(GObject child) + { + if (scrollPane != null) + { + return scrollPane.IsChildInView(child); + } + else if (rootContainer.clipRect != null) + { + return child.x + child.width >= 0 && child.x <= this.width + && child.y + child.height >= 0 && child.y <= this.height; + } + else + return true; + } + + virtual public int GetFirstChildInView() + { + int cnt = _children.Count; + for (int i = 0; i < cnt; ++i) + { + GObject child = _children[i]; + if (IsChildInView(child)) + return i; + } + return -1; + } + + protected void SetupScroll(ByteBuffer buffer) + { + if (rootContainer == container) + { + container = new Container(); + rootContainer.AddChild(container); + } + + scrollPane = new ScrollPane(this); + scrollPane.Setup(buffer); + } + + protected void SetupOverflow(OverflowType overflow) + { + if (overflow == OverflowType.Hidden) + { + if (rootContainer == container) + { + container = new Container(); + rootContainer.AddChild(container); + } + + UpdateClipRect(); + container.SetXY(_margin.left, _margin.top); + } + else if (_margin.left != 0 || _margin.top != 0) + { + if (rootContainer == container) + { + container = new Container(); + rootContainer.AddChild(container); + } + + container.SetXY(_margin.left, _margin.top); + } + } + + void UpdateClipRect() + { + if (scrollPane == null) + { + float w = this.width - (_margin.left + _margin.right); + float h = this.height - (_margin.top + _margin.bottom); + rootContainer.clipRect = new Rect(_margin.left, _margin.top, w, h); + } + else + rootContainer.clipRect = new Rect(0, 0, this.width, this.height); + } + + override protected void HandleSizeChanged() + { + base.HandleSizeChanged(); + + if (scrollPane != null) + scrollPane.OnOwnerSizeChanged(); + if (rootContainer.clipRect != null) + UpdateClipRect(); + } + + override protected void HandleGrayedChanged() + { + Controller cc = GetController("grayed"); + if (cc != null) + cc.selectedIndex = this.grayed ? 1 : 0; + else + base.HandleGrayedChanged(); + } + + override public void HandleControllerChanged(Controller c) + { + base.HandleControllerChanged(c); + + if (scrollPane != null) + scrollPane.HandleControllerChanged(c); + } + + /// + /// Notify the component the bounds should recaculate. + /// + public void SetBoundsChangedFlag() + { + if (scrollPane == null && !_trackBounds) + return; + + _boundsChanged = true; + } + + /// + /// Make sure the bounds of the component is correct. + /// Bounds of the component is not updated on every changed. For example, you add a new child to the list, children in the list will be rearranged in next frame. + /// If you want to access the correct child position immediatelly, call this function first. + /// + public void EnsureBoundsCorrect() + { + if (_boundsChanged) + UpdateBounds(); + } + + virtual protected void UpdateBounds() + { + float ax, ay, aw, ah; + if (_children.Count > 0) + { + ax = int.MaxValue; + ay = int.MaxValue; + float ar = int.MinValue, ab = int.MinValue; + float tmp; + + int cnt = _children.Count; + for (int i = 0; i < cnt; ++i) + { + GObject child = _children[i]; + tmp = child.x; + if (tmp < ax) + ax = tmp; + tmp = child.y; + if (tmp < ay) + ay = tmp; + tmp = child.x + (child.pivotAsAnchor ? child.actualWidth * (1 - child.pivot.x) : child.actualWidth);//Add anchor offset + if (tmp > ar) + ar = tmp; + tmp = child.y + (child.pivotAsAnchor ? child.actualHeight * (1 - child.pivot.y) : child.actualHeight);//Add anchor offset + if (tmp > ab) + ab = tmp; + } + aw = ar - ax; + ah = ab - ay; + } + else + { + ax = 0; + ay = 0; + aw = 0; + ah = 0; + } + + SetBounds(ax, ay, aw, ah); + } + + protected void SetBounds(float ax, float ay, float aw, float ah) + { + _boundsChanged = false; + if (scrollPane != null) + scrollPane.SetContentSize(Mathf.RoundToInt(ax + aw), Mathf.RoundToInt(ay + ah)); + } + + /// + /// Viwe port width of the container. + /// + public float viewWidth + { + get + { + if (scrollPane != null) + return scrollPane.viewWidth; + else + return this.width - _margin.left - _margin.right; + } + + set + { + if (scrollPane != null) + scrollPane.viewWidth = value; + else + this.width = value + _margin.left + _margin.right; + } + } + + /// + /// View port height of the container. + /// + public float viewHeight + { + get + { + if (scrollPane != null) + return scrollPane.viewHeight; + else + return this.height - _margin.top - _margin.bottom; + } + + set + { + if (scrollPane != null) + scrollPane.viewHeight = value; + else + this.height = value + _margin.top + _margin.bottom; + } + } + + public void GetSnappingPosition(ref float xValue, ref float yValue) + { + GetSnappingPositionWithDir(ref xValue, ref yValue, 0, 0); + } + + protected bool ShouldSnapToNext(float dir, float delta, float size) + { + return dir < 0 && delta > UIConfig.defaultScrollSnappingThreshold * size + || dir > 0 && delta > (1 - UIConfig.defaultScrollSnappingThreshold) * size + || dir == 0 && delta > size / 2; + } + + /** + * dir正数表示右移或者下移,负数表示左移或者上移 + */ + virtual public void GetSnappingPositionWithDir(ref float xValue, ref float yValue, float xDir, float yDir) + { + int cnt = _children.Count; + if (cnt == 0) + return; + + EnsureBoundsCorrect(); + + GObject obj = null; + + int i = 0; + if (yValue != 0) + { + for (; i < cnt; i++) + { + obj = _children[i]; + if (yValue < obj.y) + { + if (i == 0) + { + yValue = 0; + break; + } + else + { + GObject prev = _children[i - 1]; + if (ShouldSnapToNext(yDir, yValue - prev.y, prev.height)) + yValue = obj.y; + else + yValue = prev.y; + break; + } + } + } + + if (i == cnt) + yValue = obj.y; + } + + if (xValue != 0) + { + if (i > 0) + i--; + for (; i < cnt; i++) + { + obj = _children[i]; + if (xValue < obj.x) + { + if (i == 0) + { + xValue = 0; + break; + } + else + { + GObject prev = _children[i - 1]; + if (ShouldSnapToNext(xDir, xValue - prev.x, prev.width)) + xValue = obj.x; + else + xValue = prev.x; + break; + } + } + } + if (i == cnt) + xValue = obj.x; + } + } + + internal void ChildSortingOrderChanged(GObject child, int oldValue, int newValue) + { + if (newValue == 0) + { + _sortingChildCount--; + SetChildIndex(child, _children.Count); + } + else + { + if (oldValue == 0) + _sortingChildCount++; + + int oldIndex = _children.IndexOf(child); + int index = GetInsertPosForSortingChild(child); + if (oldIndex < index) + _SetChildIndex(child, oldIndex, index - 1); + else + _SetChildIndex(child, oldIndex, index); + } + } + + /// + /// 每帧调用的一个回调。如果你要override,请记住以下两点: + /// 1、记得调用base.onUpdate; + /// 2、不要在方法里进行任何会更改显示列表的操作,例如AddChild、RemoveChild、visible等。 + /// + virtual protected void OnUpdate() + { + if (_boundsChanged) + UpdateBounds(); + } + + override public void ConstructFromResource() + { + ConstructFromResource(null, 0); + } + + internal void ConstructFromResource(List objectPool, int poolIndex) + { + this.gameObjectName = packageItem.name; + + PackageItem contentItem = packageItem.getBranch(); + + if (!contentItem.translated) + { + contentItem.translated = true; + TranslationHelper.TranslateComponent(contentItem); + } + + ByteBuffer buffer = contentItem.rawData; + buffer.Seek(0, 0); + + underConstruct = true; + + sourceWidth = buffer.ReadInt(); + sourceHeight = buffer.ReadInt(); + initWidth = sourceWidth; + initHeight = sourceHeight; + + SetSize(sourceWidth, sourceHeight); + + if (buffer.ReadBool()) + { + minWidth = buffer.ReadInt(); + maxWidth = buffer.ReadInt(); + minHeight = buffer.ReadInt(); + maxHeight = buffer.ReadInt(); + } + + if (buffer.ReadBool()) + { + float f1 = buffer.ReadFloat(); + float f2 = buffer.ReadFloat(); + SetPivot(f1, f2, buffer.ReadBool()); + } + + if (buffer.ReadBool()) + { + _margin.top = buffer.ReadInt(); + _margin.bottom = buffer.ReadInt(); + _margin.left = buffer.ReadInt(); + _margin.right = buffer.ReadInt(); + } + + OverflowType overflow = (OverflowType)buffer.ReadByte(); + if (overflow == OverflowType.Scroll) + { + int savedPos = buffer.position; + buffer.Seek(0, 7); + SetupScroll(buffer); + buffer.position = savedPos; + } + else + SetupOverflow(overflow); + + if (buffer.ReadBool()) + { + int i1 = buffer.ReadInt(); + int i2 = buffer.ReadInt(); + this.clipSoftness = new Vector2(i1, i2); + } + + _buildingDisplayList = true; + + buffer.Seek(0, 1); + + int controllerCount = buffer.ReadShort(); + for (int i = 0; i < controllerCount; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + Controller controller = new Controller(); + _controllers.Add(controller); + controller.parent = this; + controller.Setup(buffer); + + buffer.position = nextPos; + } + + buffer.Seek(0, 2); + + GObject child; + int childCount = buffer.ReadShort(); + for (int i = 0; i < childCount; i++) + { + int dataLen = buffer.ReadShort(); + int curPos = buffer.position; + + if (objectPool != null) + child = objectPool[poolIndex + i]; + else + { + buffer.Seek(curPos, 0); + + ObjectType type = (ObjectType)buffer.ReadByte(); + string src = buffer.ReadS(); + string pkgId = buffer.ReadS(); + + PackageItem pi = null; + if (src != null) + { + UIPackage pkg; + if (pkgId != null) + pkg = UIPackage.GetById(pkgId); + else + pkg = contentItem.owner; + + pi = pkg != null ? pkg.GetItem(src) : null; + } + + if (pi != null) + { + child = UIObjectFactory.NewObject(pi); + child.ConstructFromResource(); + } + else + child = UIObjectFactory.NewObject(type); + } + + child.underConstruct = true; + child.Setup_BeforeAdd(buffer, curPos); + child.InternalSetParent(this); + _children.Add(child); + + buffer.position = curPos + dataLen; + } + + buffer.Seek(0, 3); + this.relations.Setup(buffer, true); + + buffer.Seek(0, 2); + buffer.Skip(2); + + for (int i = 0; i < childCount; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + buffer.Seek(buffer.position, 3); + _children[i].relations.Setup(buffer, false); + + buffer.position = nextPos; + } + + buffer.Seek(0, 2); + buffer.Skip(2); + + for (int i = 0; i < childCount; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + child = _children[i]; + child.Setup_AfterAdd(buffer, buffer.position); + child.underConstruct = false; + if (child.displayObject != null) + child.displayObject.cachedTransform.SetParent(this.displayObject.cachedTransform, false); + + buffer.position = nextPos; + } + + buffer.Seek(0, 4); + + buffer.Skip(2); //customData + this.opaque = buffer.ReadBool(); + int maskId = buffer.ReadShort(); + if (maskId != -1) + { + container.mask = GetChildAt(maskId).displayObject; + if (buffer.ReadBool()) + container.reversedMask = true; + } + + { + string hitTestId = buffer.ReadS(); + int i1 = buffer.ReadInt(); + int i2 = buffer.ReadInt(); + if (hitTestId != null) + { + PackageItem pi = contentItem.owner.GetItem(hitTestId); + if (pi != null && pi.pixelHitTestData != null) + rootContainer.hitArea = new PixelHitTest(pi.pixelHitTestData, i1, i2, sourceWidth, sourceHeight); + } + else if (i1 != 0 && i2 != -1) + { + rootContainer.hitArea = new ShapeHitTest(this.GetChildAt(i2).displayObject); + } + } + + if (buffer.version >= 5) + { + string str = buffer.ReadS(); + if (!string.IsNullOrEmpty(str)) + this.onAddedToStage.Add(() => __playSound(str, 1)); + + string str2 = buffer.ReadS(); + if (!string.IsNullOrEmpty(str2)) + this.onRemovedFromStage.Add(() => __playSound(str2, 1)); + } + + buffer.Seek(0, 5); + + int transitionCount = buffer.ReadShort(); + for (int i = 0; i < transitionCount; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + Transition trans = new Transition(this); + trans.Setup(buffer); + _transitions.Add(trans); + + buffer.position = nextPos; + } + + if (_transitions.Count > 0) + { + this.onAddedToStage.Add(__addedToStage); + this.onRemovedFromStage.Add(__removedFromStage); + } + + ApplyAllControllers(); + + _buildingDisplayList = false; + underConstruct = false; + + BuildNativeDisplayList(); + SetBoundsChangedFlag(); + + if (contentItem.objectType != ObjectType.Component) + ConstructExtension(buffer); + + ConstructFromXML(null); + +#if FAIRYGUI_TOLUA + CallLua("ctor"); +#endif +#if FAIRYGUI_PUERTS + if (__onConstruct != null) + __onConstruct(); +#endif + } + + virtual protected void ConstructExtension(ByteBuffer buffer) + { + } + + /// + /// Method for extensions to override + /// + /// + virtual public void ConstructFromXML(XML xml) + { + } + + public override void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_AfterAdd(buffer, beginPos); + + buffer.Seek(beginPos, 4); + + int pageController = buffer.ReadShort(); + if (pageController != -1 && scrollPane != null && scrollPane.pageMode) + scrollPane.pageController = parent.GetControllerAt(pageController); + + int cnt = buffer.ReadShort(); + for (int i = 0; i < cnt; i++) + { + Controller cc = GetController(buffer.ReadS()); + string pageId = buffer.ReadS(); + if (cc != null) + cc.selectedPageId = pageId; + } + + if (buffer.version >= 2) + { + cnt = buffer.ReadShort(); + for (int i = 0; i < cnt; i++) + { + string target = buffer.ReadS(); + int propertyId = buffer.ReadShort(); + string value = buffer.ReadS(); + GObject obj = this.GetChildByPath(target); + if (obj != null) + { + if (propertyId == 0) + obj.text = value; + else if (propertyId == 1) + obj.icon = value; + } + } + } + } + + void __playSound(string soundRes, float volumeScale) + { + NAudioClip sound = UIPackage.GetItemAssetByURL(soundRes) as NAudioClip; + if (sound != null && sound.nativeClip != null) + Stage.inst.PlayOneShotSound(sound.nativeClip, volumeScale); + } + + void __addedToStage() + { + int cnt = _transitions.Count; + for (int i = 0; i < cnt; ++i) + _transitions[i].OnOwnerAddedToStage(); + } + + void __removedFromStage() + { + int cnt = _transitions.Count; + for (int i = 0; i < cnt; ++i) + _transitions[i].OnOwnerRemovedFromStage(); + } + +#if FAIRYGUI_TOLUA + internal LuaTable _peerTable; + + public void SetLuaPeer(LuaTable peerTable) + { + _peerTable = peerTable; + } + + [NoToLua] + public bool CallLua(string funcName) + { + if (_peerTable != null) + { + LuaFunction ctor = _peerTable.GetLuaFunction(funcName); + if (ctor != null) + { + try + { + ctor.Call(this); + } + catch (Exception err) + { + Debug.LogError(err); + } + + ctor.Dispose(); + return true; + } + } + + return false; + } +#endif + +#if FAIRYGUI_PUERTS + public Action __onConstruct; + public Action __onDispose; +#endif + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs.meta new file mode 100644 index 0000000..c31a2e4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GComponent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a21ec486dca945f459590f80e1e6f699 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs new file mode 100644 index 0000000..e1df4fe --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs @@ -0,0 +1,274 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GGraph class. + /// 对应编辑器里的图形对象。图形有两个用途,一是用来显示简单的图形,例如矩形等;二是作为一个占位的用途, + /// 可以将本对象替换为其他对象,或者在它的前后添加其他对象,相当于一个位置和深度的占位;还可以直接将内容设置 + /// 为原生对象。 + /// + public class GGraph : GObject, IColorGear + { + Shape _shape; + + public GGraph() + { + } + + override protected void CreateDisplayObject() + { + _shape = new Shape(); + _shape.gOwner = this; + displayObject = _shape; + } + + /// + /// Replace this object to another object in the display list. + /// 在显示列表中,将指定对象取代这个图形对象。这个图形对象相当于一个占位的用途。 + /// + /// Target object. + public void ReplaceMe(GObject target) + { + if (parent == null) + throw new Exception("parent not set"); + + target.name = this.name; + target.alpha = this.alpha; + target.rotation = this.rotation; + target.visible = this.visible; + target.touchable = this.touchable; + target.grayed = this.grayed; + target.SetXY(this.x, this.y); + target.SetSize(this.width, this.height); + + int index = parent.GetChildIndex(this); + parent.AddChildAt(target, index); + target.relations.CopyFrom(this.relations); + + parent.RemoveChild(this, true); + } + + /// + /// Add another object before this object. + /// 在显示列表中,将另一个对象插入到这个对象的前面。 + /// + /// Target object. + public void AddBeforeMe(GObject target) + { + if (parent == null) + throw new Exception("parent not set"); + + int index = parent.GetChildIndex(this); + parent.AddChildAt(target, index); + } + + /// + /// Add another object after this object. + /// 在显示列表中,将另一个对象插入到这个对象的后面。 + /// + /// Target object. + public void AddAfterMe(GObject target) + { + if (parent == null) + throw new Exception("parent not set"); + + int index = parent.GetChildIndex(this); + index++; + parent.AddChildAt(target, index); + } + + /// + /// 设置内容为一个原生对象。这个图形对象相当于一个占位的用途。 + /// + /// 原生对象 + public void SetNativeObject(DisplayObject obj) + { + if (displayObject == obj) + return; + + if (_shape != null) + { + if (_shape.parent != null) + _shape.parent.RemoveChild(displayObject, true); + else + _shape.Dispose(); + _shape.gOwner = null; + _shape = null; + } + + displayObject = obj; + + if (displayObject != null) + { + displayObject.alpha = this.alpha; + displayObject.rotation = this.rotation; + displayObject.visible = this.visible; + displayObject.touchable = this.touchable; + displayObject.gOwner = this; + } + + if (parent != null) + parent.ChildStateChanged(this); + HandlePositionChanged(); + } + + /// + /// + /// + public Color color + { + get + { + if (_shape != null) + return _shape.color; + else + return Color.clear; + } + set + { + if (_shape != null && _shape.color != value) + { + _shape.color = value; + UpdateGear(4); + } + } + } + + /// + /// Get the shape object. It can be used for drawing. + /// 获取图形的原生对象,可用于绘制图形。 + /// + public Shape shape + { + get { return _shape; } + } + + /// + /// Draw a rectangle. + /// 画矩形。 + /// + /// Width + /// Height + /// Line size + /// Line color + /// Fill color + public void DrawRect(float aWidth, float aHeight, int lineSize, Color lineColor, Color fillColor) + { + this.SetSize(aWidth, aHeight); + _shape.DrawRect(lineSize, lineColor, fillColor); + } + + /// + /// + /// + /// + /// + /// + /// + public void DrawRoundRect(float aWidth, float aHeight, Color fillColor, float[] corner) + { + this.SetSize(aWidth, aHeight); + this.shape.DrawRoundRect(0, Color.white, fillColor, corner[0], corner[1], corner[2], corner[3]); + } + + /// + /// + /// + /// + /// + /// + public void DrawEllipse(float aWidth, float aHeight, Color fillColor) + { + this.SetSize(aWidth, aHeight); + _shape.DrawEllipse(fillColor); + } + + /// + /// + /// + /// + /// + /// + /// + public void DrawPolygon(float aWidth, float aHeight, IList points, Color fillColor) + { + this.SetSize(aWidth, aHeight); + _shape.DrawPolygon(points, fillColor); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public void DrawPolygon(float aWidth, float aHeight, IList points, Color fillColor, float lineSize, Color lineColor) + { + this.SetSize(aWidth, aHeight); + _shape.DrawPolygon(points, fillColor, lineSize, lineColor); + } + + override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 5); + + int type = buffer.ReadByte(); + if (type != 0) + { + int lineSize = buffer.ReadInt(); + Color lineColor = buffer.ReadColor(); + Color fillColor = buffer.ReadColor(); + bool roundedRect = buffer.ReadBool(); + Vector4 cornerRadius = new Vector4(); + if (roundedRect) + { + for (int i = 0; i < 4; i++) + cornerRadius[i] = buffer.ReadFloat(); + } + + if (type == 1) + { + if (roundedRect) + _shape.DrawRoundRect(lineSize, lineColor, fillColor, cornerRadius.x, cornerRadius.y, cornerRadius.z, cornerRadius.w); + else + _shape.DrawRect(lineSize, lineColor, fillColor); + } + else if (type == 2) + _shape.DrawEllipse(lineSize, fillColor, lineColor, fillColor, 0, 360); + else if (type == 3) + { + int cnt = buffer.ReadShort() / 2; + Vector2[] points = new Vector2[cnt]; + for (int i = 0; i < cnt; i++) + points[i].Set(buffer.ReadFloat(), buffer.ReadFloat()); + + _shape.DrawPolygon(points, fillColor, lineSize, lineColor); + } + else if (type == 4) + { + int sides = buffer.ReadShort(); + float startAngle = buffer.ReadFloat(); + int cnt = buffer.ReadShort(); + float[] distances = null; + if (cnt > 0) + { + distances = new float[cnt]; + for (int i = 0; i < cnt; i++) + distances[i] = buffer.ReadFloat(); + } + + _shape.DrawRegularPolygon(sides, lineSize, null, lineColor, fillColor, startAngle, distances); + } + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs.meta new file mode 100644 index 0000000..55808f8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GGraph.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 913b7964e87194d4182c1ad388d94f19 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs new file mode 100644 index 0000000..8958c01 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs @@ -0,0 +1,538 @@ +using System; +using FairyGUI.Utils; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// GGroup class. + /// 组对象,对应编辑器里的高级组。 + /// + public class GGroup : GObject + { + GroupLayoutType _layout; + int _lineGap; + int _columnGap; + + bool _excludeInvisibles; + bool _autoSizeDisabled; + int _mainGridIndex; + int _mainGridMinSize; + + bool _percentReady; + bool _boundsChanged; + int _mainChildIndex; + float _totalSize; + int _numChildren; + internal int _updating; + + Action _refreshDelegate; + + public GGroup() + { + _mainGridIndex = -1; + _mainChildIndex = -1; + _mainGridMinSize = 50; + _refreshDelegate = EnsureBoundsCorrect; + } + + /// + /// Group layout type. + /// + public GroupLayoutType layout + { + get { return _layout; } + set + { + if (_layout != value) + { + _layout = value; + SetBoundsChangedFlag(); + } + } + } + + /// + /// + /// + public int lineGap + { + get { return _lineGap; } + set + { + if (_lineGap != value) + { + _lineGap = value; + SetBoundsChangedFlag(true); + } + } + } + + /// + /// + /// + public int columnGap + { + get { return _columnGap; } + set + { + if (_columnGap != value) + { + _columnGap = value; + SetBoundsChangedFlag(true); + } + } + } + + /// + /// + /// + public bool excludeInvisibles + { + get { return _excludeInvisibles; } + set + { + if (_excludeInvisibles != value) + { + _excludeInvisibles = value; + SetBoundsChangedFlag(); + } + } + } + + /// + /// + /// + public bool autoSizeDisabled + { + get { return _autoSizeDisabled; } + set + { + if (_autoSizeDisabled != value) + { + _autoSizeDisabled = value; + SetBoundsChangedFlag(); + } + } + } + + /// + /// + /// + public int mainGridMinSize + { + get { return _mainGridMinSize; } + set + { + if (_mainGridMinSize != value) + { + _mainGridMinSize = value; + SetBoundsChangedFlag(); + } + } + } + + /// + /// + /// + public int mainGridIndex + { + get { return _mainGridIndex; } + set + { + if (_mainGridIndex != value) + { + _mainGridIndex = value; + SetBoundsChangedFlag(); + } + } + } + + /// + /// Update group bounds. + /// 更新组的包围. + /// + public void SetBoundsChangedFlag(bool positionChangedOnly = false) + { + if (_updating == 0 && parent != null) + { + if (!positionChangedOnly) + _percentReady = false; + + if (!_boundsChanged) + { + _boundsChanged = true; + + if (_layout != GroupLayoutType.None) + { + UpdateContext.OnBegin -= _refreshDelegate; + UpdateContext.OnBegin += _refreshDelegate; + } + } + } + } + + public void EnsureBoundsCorrect() + { + if (parent == null || !_boundsChanged) + return; + + UpdateContext.OnBegin -= _refreshDelegate; + _boundsChanged = false; + + if (_autoSizeDisabled) + ResizeChildren(0, 0); + else + { + HandleLayout(); + UpdateBounds(); + } + } + + void UpdateBounds() + { + int cnt = parent.numChildren; + int i; + GObject child; + float ax = int.MaxValue, ay = int.MaxValue; + float ar = int.MinValue, ab = int.MinValue; + float tmp; + bool empty = true; + bool skipInvisibles = _layout != GroupLayoutType.None && _excludeInvisibles; + + for (i = 0; i < cnt; i++) + { + child = parent.GetChildAt(i); + if (child.group != this) + continue; + + if (skipInvisibles && !child.internalVisible3) + continue; + + tmp = child.xMin; + if (tmp < ax) + ax = tmp; + tmp = child.yMin; + if (tmp < ay) + ay = tmp; + tmp = child.xMin + child.width; + if (tmp > ar) + ar = tmp; + tmp = child.yMin + child.height; + if (tmp > ab) + ab = tmp; + + empty = false; + } + + float w; + float h; + if (!empty) + { + _updating |= 1; + SetXY(ax, ay); + _updating &= 2; + + w = ar - ax; + h = ab - ay; + } + else + w = h = 0; + + if ((_updating & 2) == 0) + { + _updating |= 2; + SetSize(w, h); + _updating &= 1; + } + else + { + _updating &= 1; + ResizeChildren(_width - w, _height - h); + } + } + + void HandleLayout() + { + _updating |= 1; + + if (_layout == GroupLayoutType.Horizontal) + { + float curX = this.x; + int cnt = parent.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject child = parent.GetChildAt(i); + if (child.group != this) + continue; + if (_excludeInvisibles && !child.internalVisible3) + continue; + + child.xMin = curX; + if (child.width != 0) + curX += child.width + _columnGap; + } + } + else if (_layout == GroupLayoutType.Vertical) + { + float curY = this.y; + int cnt = parent.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject child = parent.GetChildAt(i); + if (child.group != this) + continue; + if (_excludeInvisibles && !child.internalVisible3) + continue; + + child.yMin = curY; + if (child.height != 0) + curY += child.height + _lineGap; + } + } + + _updating &= 2; + } + + internal void MoveChildren(float dx, float dy) + { + if ((_updating & 1) != 0 || parent == null) + return; + + _updating |= 1; + + int cnt = parent.numChildren; + int i; + GObject child; + for (i = 0; i < cnt; i++) + { + child = parent.GetChildAt(i); + if (child.group == this) + { + child.SetXY(child.x + dx, child.y + dy); + } + } + + _updating &= 2; + } + + internal void ResizeChildren(float dw, float dh) + { + if (_layout == GroupLayoutType.None || (_updating & 2) != 0 || parent == null) + return; + + _updating |= 2; + + if (_boundsChanged) + { + _boundsChanged = false; + if (!_autoSizeDisabled) + { + UpdateBounds(); + return; + } + } + + int cnt = parent.numChildren; + + if (!_percentReady) + { + _percentReady = true; + _numChildren = 0; + _totalSize = 0; + _mainChildIndex = -1; + + int j = 0; + for (int i = 0; i < cnt; i++) + { + GObject child = parent.GetChildAt(i); + if (child.group != this) + continue; + + if (!_excludeInvisibles || child.internalVisible3) + { + if (j == _mainGridIndex) + _mainChildIndex = i; + + _numChildren++; + + if (_layout == GroupLayoutType.Horizontal) + _totalSize += child.width; + else + _totalSize += child.height; + } + + j++; + } + + if (_mainChildIndex != -1) + { + if (_layout == GroupLayoutType.Horizontal) + { + GObject child = parent.GetChildAt(_mainChildIndex); + _totalSize += _mainGridMinSize - child.width; + child._sizePercentInGroup = _mainGridMinSize / _totalSize; + } + else + { + GObject child = parent.GetChildAt(_mainChildIndex); + _totalSize += _mainGridMinSize - child.height; + child._sizePercentInGroup = _mainGridMinSize / _totalSize; + } + } + + for (int i = 0; i < cnt; i++) + { + GObject child = parent.GetChildAt(i); + if (child.group != this) + continue; + + if (i == _mainChildIndex) + continue; + + if (_totalSize > 0) + child._sizePercentInGroup = (_layout == GroupLayoutType.Horizontal ? child.width : child.height) / _totalSize; + else + child._sizePercentInGroup = 0; + } + } + + float remainSize = 0; + float remainPercent = 1; + bool priorHandled = false; + + if (_layout == GroupLayoutType.Horizontal) + { + remainSize = this.width - (_numChildren - 1) * _columnGap; + if (_mainChildIndex != -1 && remainSize >= _totalSize) + { + GObject child = parent.GetChildAt(_mainChildIndex); + child.SetSize(remainSize - (_totalSize - _mainGridMinSize), child._rawHeight + dh, true); + remainSize -= child.width; + remainPercent -= child._sizePercentInGroup; + priorHandled = true; + } + + float curX = this.x; + for (int i = 0; i < cnt; i++) + { + GObject child = parent.GetChildAt(i); + if (child.group != this) + continue; + + if (_excludeInvisibles && !child.internalVisible3) + { + child.SetSize(child._rawWidth, child._rawHeight + dh, true); + continue; + } + + if (!priorHandled || i != _mainChildIndex) + { + child.SetSize(Mathf.Round(child._sizePercentInGroup / remainPercent * remainSize), child._rawHeight + dh, true); + remainPercent -= child._sizePercentInGroup; + remainSize -= child.width; + } + + child.xMin = curX; + if (child.width != 0) + curX += child.width + _columnGap; + } + } + else + { + remainSize = this.height - (_numChildren - 1) * _lineGap; + if (_mainChildIndex != -1 && remainSize >= _totalSize) + { + GObject child = parent.GetChildAt(_mainChildIndex); + child.SetSize(child._rawWidth + dw, remainSize - (_totalSize - _mainGridMinSize), true); + remainSize -= child.height; + remainPercent -= child._sizePercentInGroup; + priorHandled = true; + } + + float curY = this.y; + for (int i = 0; i < cnt; i++) + { + GObject child = parent.GetChildAt(i); + if (child.group != this) + continue; + + if (_excludeInvisibles && !child.internalVisible3) + { + child.SetSize(child._rawWidth + dw, child._rawHeight, true); + continue; + } + + if (!priorHandled || i != _mainChildIndex) + { + child.SetSize(child._rawWidth + dw, Mathf.Round(child._sizePercentInGroup / remainPercent * remainSize), true); + remainPercent -= child._sizePercentInGroup; + remainSize -= child.height; + } + + child.yMin = curY; + if (child.height != 0) + curY += child.height + _lineGap; + } + } + + _updating &= 1; + } + + override protected void HandleAlphaChanged() + { + base.HandleAlphaChanged(); + + if (this.underConstruct || parent == null) + return; + + int cnt = parent.numChildren; + float a = this.alpha; + for (int i = 0; i < cnt; i++) + { + GObject child = parent.GetChildAt(i); + if (child.group == this) + child.alpha = a; + } + } + + override internal protected void HandleVisibleChanged() + { + if (parent == null) + return; + + int cnt = parent.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject child = parent.GetChildAt(i); + if (child.group == this) + child.HandleVisibleChanged(); + } + } + + override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 5); + + _layout = (GroupLayoutType)buffer.ReadByte(); + _lineGap = buffer.ReadInt(); + _columnGap = buffer.ReadInt(); + if (buffer.version >= 2) + { + _excludeInvisibles = buffer.ReadBool(); + _autoSizeDisabled = buffer.ReadBool(); + _mainGridIndex = buffer.ReadShort(); + } + } + + override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_AfterAdd(buffer, beginPos); + + if (!this.visible) + HandleVisibleChanged(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs.meta new file mode 100644 index 0000000..f70f577 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GGroup.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b8aac7740f89ffc409bfb6cd30d58fec +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs new file mode 100644 index 0000000..457d71d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs @@ -0,0 +1,170 @@ +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GImage class. + /// + public class GImage : GObject, IColorGear + { + Image _content; + + public GImage() + { + } + + override protected void CreateDisplayObject() + { + _content = new Image(); + _content.gOwner = this; + displayObject = _content; + } + + /// + /// Color of the image. + /// + public Color color + { + get { return _content.color; } + set + { + _content.color = value; + UpdateGear(4); + } + } + + /// + /// Flip type. + /// + /// + public FlipType flip + { + get { return _content.graphics.flip; } + set { _content.graphics.flip = value; } + } + + /// + /// Fill method. + /// + /// + public FillMethod fillMethod + { + get { return _content.fillMethod; } + set { _content.fillMethod = value; } + } + + /// + /// Fill origin. + /// + /// + /// + /// + /// + /// + public int fillOrigin + { + get { return _content.fillOrigin; } + set { _content.fillOrigin = value; } + } + + /// + /// Fill clockwise if true. + /// + public bool fillClockwise + { + get { return _content.fillClockwise; } + set { _content.fillClockwise = value; } + } + + /// + /// Fill amount. (0~1) + /// + public float fillAmount + { + get { return _content.fillAmount; } + set { _content.fillAmount = value; } + } + + /// + /// Set texture directly. The image wont own the texture. + /// + public NTexture texture + { + get { return _content.texture; } + set + { + if (value != null) + { + sourceWidth = value.width; + sourceHeight = value.height; + } + else + { + sourceWidth = 0; + sourceHeight = 0; + } + initWidth = sourceWidth; + initHeight = sourceHeight; + _content.texture = value; + } + } + + /// + /// Set material. + /// + public Material material + { + get { return _content.material; } + set { _content.material = value; } + } + + /// + /// Set shader. + /// + public string shader + { + get { return _content.shader; } + set { _content.shader = value; } + } + + override public void ConstructFromResource() + { + this.gameObjectName = packageItem.name; + + PackageItem contentItem = packageItem.getBranch(); + sourceWidth = contentItem.width; + sourceHeight = contentItem.height; + initWidth = sourceWidth; + initHeight = sourceHeight; + + contentItem = contentItem.getHighResolution(); + contentItem.Load(); + _content.scale9Grid = contentItem.scale9Grid; + _content.scaleByTile = contentItem.scaleByTile; + _content.tileGridIndice = contentItem.tileGridIndice; + _content.texture = contentItem.texture; + _content.textureScale = new Vector2(contentItem.width / (float)sourceWidth, contentItem.height / (float)sourceHeight); + + SetSize(sourceWidth, sourceHeight); + } + + override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 5); + + if (buffer.ReadBool()) + _content.color = buffer.ReadColor(); + _content.graphics.flip = (FlipType)buffer.ReadByte(); + _content.fillMethod = (FillMethod)buffer.ReadByte(); + if (_content.fillMethod != FillMethod.None) + { + _content.fillOrigin = buffer.ReadByte(); + _content.fillClockwise = buffer.ReadBool(); + _content.fillAmount = buffer.ReadFloat(); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs.meta new file mode 100644 index 0000000..3e67777 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GImage.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 106156ac7c8773640af01f14fd396393 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs new file mode 100644 index 0000000..bc0a5b2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs @@ -0,0 +1,235 @@ +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GLabel class. + /// + public class GLabel : GComponent, IColorGear + { + protected GObject _titleObject; + protected GObject _iconObject; + + public GLabel() + { + } + + /// + /// Icon of the label. + /// + override public string icon + { + get + { + if (_iconObject != null) + return _iconObject.icon; + else + return null; + } + + set + { + if (_iconObject != null) + _iconObject.icon = value; + UpdateGear(7); + } + } + + /// + /// Title of the label. + /// + public string title + { + get + { + if (_titleObject != null) + return _titleObject.text; + else + return null; + } + set + { + if (_titleObject != null) + _titleObject.text = value; + UpdateGear(6); + } + } + + /// + /// Same of the title. + /// + override public string text + { + get { return this.title; } + set { this.title = value; } + } + + /// + /// If title is input text. + /// + public bool editable + { + get + { + if (_titleObject is GTextInput) + return _titleObject.asTextInput.editable; + else + return false; + } + + set + { + if (_titleObject is GTextInput) + _titleObject.asTextInput.editable = value; + } + } + + /// + /// Title color of the label + /// + public Color titleColor + { + get + { + GTextField tf = GetTextField(); + if (tf != null) + return tf.color; + else + return Color.black; + } + set + { + GTextField tf = GetTextField(); + if (tf != null) + { + tf.color = value; + UpdateGear(4); + } + } + } + + /// + /// + /// + public int titleFontSize + { + get + { + GTextField tf = GetTextField(); + if (tf != null) + return tf.textFormat.size; + else + return 0; + } + set + { + GTextField tf = GetTextField(); + if (tf != null) + { + TextFormat format = tf.textFormat; + format.size = value; + tf.textFormat = format; + } + } + } + + /// + /// + /// + public Color color + { + get { return this.titleColor; } + set { this.titleColor = value; } + } + + /// + /// + /// + /// + public GTextField GetTextField() + { + if (_titleObject is GTextField) + return (GTextField)_titleObject; + else if (_titleObject is GLabel) + return ((GLabel)_titleObject).GetTextField(); + else if (_titleObject is GButton) + return ((GButton)_titleObject).GetTextField(); + else + return null; + } + + override protected void ConstructExtension(ByteBuffer buffer) + { + _titleObject = GetChild("title"); + _iconObject = GetChild("icon"); + } + + override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_AfterAdd(buffer, beginPos); + + if (!buffer.Seek(beginPos, 6)) + return; + + if ((ObjectType)buffer.ReadByte() != packageItem.objectType) + return; + + string str; + str = buffer.ReadS(); + if (str != null) + this.title = str; + str = buffer.ReadS(); + if (str != null) + this.icon = str; + if (buffer.ReadBool()) + this.titleColor = buffer.ReadColor(); + int iv = buffer.ReadInt(); + if (iv != 0) + this.titleFontSize = iv; + + if (buffer.ReadBool()) + { + GTextInput input = GetTextField() as GTextInput; + if (input != null) + { + str = buffer.ReadS(); + if (str != null) + input.promptText = str; + + str = buffer.ReadS(); + if (str != null) + input.restrict = str; + + iv = buffer.ReadInt(); + if (iv != 0) + input.maxLength = iv; + iv = buffer.ReadInt(); + if (iv != 0) + input.keyboardType = iv; + if (buffer.ReadBool()) + input.displayAsPassword = true; + } + else + buffer.Skip(13); + } + + if (buffer.version >= 5) + { + string sound = buffer.ReadS(); + if (!string.IsNullOrEmpty(sound)) + { + float volumeScale = buffer.ReadFloat(); + displayObject.onClick.Add(() => + { + NAudioClip audioClip = UIPackage.GetItemAssetByURL(sound) as NAudioClip; + if (audioClip != null && audioClip.nativeClip != null) + Stage.inst.PlayOneShotSound(audioClip.nativeClip, volumeScale); + }); + } + else + buffer.Skip(4); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs.meta new file mode 100644 index 0000000..0774a35 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GLabel.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: bd9c62cc282bb9b4fa9e794317eedd30 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs new file mode 100644 index 0000000..37ced04 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs @@ -0,0 +1,3067 @@ +using System; +using System.Collections.Generic; +using FairyGUI.Utils; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// Callback function when an item is needed to update its look. + /// + /// Item index. + /// Item object. + public delegate void ListItemRenderer(int index, GObject item); + + /// + /// + /// + /// + /// + public delegate string ListItemProvider(int index); + + /// + /// GList class. + /// + public class GList : GComponent + { + /// + /// 如果true,当item不可见时自动折叠,否则依然占位 + /// + public bool foldInvisibleItems = false; + + /// + /// List selection mode + /// + /// + public ListSelectionMode selectionMode; + + /// + /// Callback function when an item is needed to update its look. + /// + public ListItemRenderer itemRenderer; + + /// + /// Callback funtion to return item resource url. + /// + public ListItemProvider itemProvider; + + /// + /// + /// + public bool scrollItemToViewOnClick; + + string _defaultItem; + ListLayoutType _layout; + int _lineCount; + int _columnCount; + int _lineGap; + int _columnGap; + AlignType _align; + VertAlignType _verticalAlign; + bool _autoResizeItem; + Controller _selectionController; + + GObjectPool _pool; + int _lastSelectedIndex; + + EventListener _onClickItem; + EventListener _onRightClickItem; + + //Virtual List support + bool _virtual; + bool _loop; + int _numItems; + int _realNumItems; + int _firstIndex; //the top left index + int _curLineItemCount; //item count in one line + int _curLineItemCount2; //只用在页面模式,表示垂直方向的项目数 + Vector2 _itemSize; + int _virtualListChanged; //1-content changed, 2-size changed + uint itemInfoVer; //用来标志item是否在本次处理中已经被重用了 + + int _miscFlags; //1-event locked, 2-focus events registered + + class ItemInfo + { + public Vector2 size; + public GObject obj; + public uint updateFlag; + public bool selected; + } + List _virtualItems; + + EventCallback1 _itemClickDelegate; + + public GList() + : base() + { + _trackBounds = true; + this.opaque = true; + scrollItemToViewOnClick = true; + + container = new Container(); + rootContainer.AddChild(container); + rootContainer.gameObject.name = "GList"; + + _pool = new GObjectPool(container.cachedTransform); + + _itemClickDelegate = __clickItem; + } + + public override void Dispose() + { + _pool.Clear(); + if (_virtualListChanged != 0) + Timers.inst.Remove(this.RefreshVirtualList); + + _selectionController = null; + scrollItemToViewOnClick = false; + itemRenderer = null; + itemProvider = null; + + base.Dispose(); + } + + /// + /// Dispatched when a list item being clicked. + /// + public EventListener onClickItem + { + get { return _onClickItem ?? (_onClickItem = new EventListener(this, "onClickItem")); } + } + + /// + /// Dispatched when a list item being clicked with right button. + /// + public EventListener onRightClickItem + { + get { return _onRightClickItem ?? (_onRightClickItem = new EventListener(this, "onRightClickItem")); } + } + + /// + /// Resource url of the default item. + /// + public string defaultItem + { + get { return _defaultItem; } + set + { + _defaultItem = UIPackage.NormalizeURL(value); + } + } + + /// + /// List layout type. + /// + public ListLayoutType layout + { + get { return _layout; } + set + { + if (_layout != value) + { + _layout = value; + SetBoundsChangedFlag(); + if (_virtual) + SetVirtualListChangedFlag(true); + } + } + } + + /// + /// + /// + public int lineCount + { + get { return _lineCount; } + set + { + if (_lineCount != value) + { + _lineCount = value; + if (_layout == ListLayoutType.FlowVertical || _layout == ListLayoutType.Pagination) + { + SetBoundsChangedFlag(); + if (_virtual) + SetVirtualListChangedFlag(true); + } + } + } + } + + /// + /// + /// + public int columnCount + { + get { return _columnCount; } + set + { + if (_columnCount != value) + { + _columnCount = value; + if (_layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) + { + SetBoundsChangedFlag(); + if (_virtual) + SetVirtualListChangedFlag(true); + } + } + } + } + + /// + /// + /// + public int lineGap + { + get { return _lineGap; } + set + { + if (_lineGap != value) + { + _lineGap = value; + SetBoundsChangedFlag(); + if (_virtual) + SetVirtualListChangedFlag(true); + } + } + } + + /// + /// + /// + public int columnGap + { + get { return _columnGap; } + set + { + if (_columnGap != value) + { + _columnGap = value; + SetBoundsChangedFlag(); + if (_virtual) + SetVirtualListChangedFlag(true); + } + } + } + + /// + /// + /// + public AlignType align + { + get { return _align; } + set + { + if (_align != value) + { + _align = value; + SetBoundsChangedFlag(); + if (_virtual) + SetVirtualListChangedFlag(true); + } + } + } + + /// + /// + /// + public VertAlignType verticalAlign + { + get { return _verticalAlign; } + set + { + if (_verticalAlign != value) + { + _verticalAlign = value; + SetBoundsChangedFlag(); + if (_virtual) + SetVirtualListChangedFlag(true); + } + } + } + /// + /// If the item will resize itself to fit the list width/height. + /// + public bool autoResizeItem + { + get { return _autoResizeItem; } + set + { + if (_autoResizeItem != value) + { + _autoResizeItem = value; + SetBoundsChangedFlag(); + if (_virtual) + SetVirtualListChangedFlag(true); + } + } + } + + /// + /// + /// + /// + public Vector2 defaultItemSize + { + get { return _itemSize; } + set + { + _itemSize = value; + if (_virtual) + { + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + this.scrollPane.scrollStep = _itemSize.y; + else + this.scrollPane.scrollStep = _itemSize.x; + SetVirtualListChangedFlag(true); + } + } + } + + /// + /// + /// + public GObjectPool itemPool + { + get { return _pool; } + } + + /// + /// + /// + /// + /// + public GObject GetFromPool(string url) + { + if (string.IsNullOrEmpty(url)) + url = _defaultItem; + + GObject ret = _pool.GetObject(url); + if (ret != null) + ret.visible = true; + return ret; + } + + void ReturnToPool(GObject obj) + { + _pool.ReturnObject(obj); + } + + /// + /// Add a item to list, same as GetFromPool+AddChild + /// + /// Item object + public GObject AddItemFromPool() + { + GObject obj = GetFromPool(null); + + return AddChild(obj); + } + + /// + /// Add a item to list, same as GetFromPool+AddChild + /// + /// Item resource url + /// Item object + public GObject AddItemFromPool(string url) + { + GObject obj = GetFromPool(url); + + return AddChild(obj); + } + + /// + /// + /// + /// + /// + /// + override public GObject AddChildAt(GObject child, int index) + { + base.AddChildAt(child, index); + if (child is GButton) + { + GButton button = (GButton)child; + button.selected = false; + button.changeStateOnClick = false; + } + + child.onClick.Add(_itemClickDelegate); + child.onRightClick.Add(_itemClickDelegate); + + return child; + } + + /// + /// + /// + /// + /// + /// + override public GObject RemoveChildAt(int index, bool dispose) + { + GObject child = base.RemoveChildAt(index, dispose); + child.onClick.Remove(_itemClickDelegate); + child.onRightClick.Remove(_itemClickDelegate); + + return child; + } + + /// + /// + /// + /// + public void RemoveChildToPoolAt(int index) + { + GObject child = base.RemoveChildAt(index); + ReturnToPool(child); + } + + /// + /// + /// + /// + public void RemoveChildToPool(GObject child) + { + base.RemoveChild(child); + ReturnToPool(child); + } + + /// + /// + /// + public void RemoveChildrenToPool() + { + RemoveChildrenToPool(0, -1); + } + + /// + /// + /// + /// + /// + public void RemoveChildrenToPool(int beginIndex, int endIndex) + { + if (endIndex < 0 || endIndex >= _children.Count) + endIndex = _children.Count - 1; + + for (int i = beginIndex; i <= endIndex; ++i) + RemoveChildToPoolAt(beginIndex); + } + + /// + /// + /// + public int selectedIndex + { + get + { + if (_virtual) + { + int cnt = _realNumItems; + for (int i = 0; i < cnt; i++) + { + ItemInfo ii = _virtualItems[i]; + if ((ii.obj is GButton) && ((GButton)ii.obj).selected + || ii.obj == null && ii.selected) + { + if (_loop) + return i % _numItems; + else + return i; + } + } + } + else + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + GButton obj = _children[i].asButton; + if (obj != null && obj.selected) + return i; + } + } + return -1; + } + + set + { + if (value >= 0 && value < this.numItems) + { + if (selectionMode != ListSelectionMode.Single) + ClearSelection(); + AddSelection(value, false); + } + else + ClearSelection(); + } + } + + /// + /// + /// + public Controller selectionController + { + get { return _selectionController; } + set { _selectionController = value; } + } + + /// + /// + /// + /// + public List GetSelection() + { + return GetSelection(null); + } + + /// + /// + /// + /// + public List GetSelection(List result) + { + if (result == null) + result = new List(); + if (_virtual) + { + int cnt = _realNumItems; + for (int i = 0; i < cnt; i++) + { + ItemInfo ii = _virtualItems[i]; + if ((ii.obj is GButton) && ((GButton)ii.obj).selected + || ii.obj == null && ii.selected) + { + int j = i; + if (_loop) + { + j = i % _numItems; + if (result.Contains(j)) + continue; + } + result.Add(j); + } + } + } + else + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + GButton obj = _children[i].asButton; + if (obj != null && obj.selected) + result.Add(i); + } + } + return result; + } + + /// + /// + /// + /// + /// + public void AddSelection(int index, bool scrollItToView) + { + if (selectionMode == ListSelectionMode.None) + return; + + CheckVirtualList(); + + if (selectionMode == ListSelectionMode.Single) + ClearSelection(); + + if (scrollItToView) + ScrollToView(index); + + _lastSelectedIndex = index; + GButton obj = null; + if (_virtual) + { + ItemInfo ii = _virtualItems[index]; + if (ii.obj != null) + obj = ii.obj.asButton; + ii.selected = true; + } + else + obj = GetChildAt(index).asButton; + + if (obj != null && !obj.selected) + { + obj.selected = true; + UpdateSelectionController(index); + } + } + + /// + /// + /// + /// + public void RemoveSelection(int index) + { + if (selectionMode == ListSelectionMode.None) + return; + + GButton obj = null; + if (_virtual) + { + ItemInfo ii = _virtualItems[index]; + if (ii.obj != null) + obj = ii.obj.asButton; + ii.selected = false; + } + else + obj = GetChildAt(index).asButton; + + if (obj != null) + obj.selected = false; + } + + /// + /// + /// + public void ClearSelection() + { + if (_virtual) + { + int cnt = _realNumItems; + for (int i = 0; i < cnt; i++) + { + ItemInfo ii = _virtualItems[i]; + if ((ii.obj is GButton)) + ((GButton)ii.obj).selected = false; + ii.selected = false; + } + } + else + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + GButton obj = _children[i].asButton; + if (obj != null) + obj.selected = false; + } + } + } + + void ClearSelectionExcept(GObject g) + { + if (_virtual) + { + int cnt = _realNumItems; + for (int i = 0; i < cnt; i++) + { + ItemInfo ii = _virtualItems[i]; + if (ii.obj != g) + { + if ((ii.obj is GButton)) + ((GButton)ii.obj).selected = false; + ii.selected = false; + } + } + } + else + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + GButton obj = _children[i].asButton; + if (obj != null && obj != g) + obj.selected = false; + } + } + } + + /// + /// + /// + public void SelectAll() + { + CheckVirtualList(); + + int last = -1; + if (_virtual) + { + int cnt = _realNumItems; + for (int i = 0; i < cnt; i++) + { + ItemInfo ii = _virtualItems[i]; + if ((ii.obj is GButton) && !((GButton)ii.obj).selected) + { + ((GButton)ii.obj).selected = true; + last = i; + } + ii.selected = true; + } + } + else + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + GButton obj = _children[i].asButton; + if (obj != null && !obj.selected) + { + obj.selected = true; + last = i; + } + } + } + + if (last != -1) + UpdateSelectionController(last); + } + + /// + /// + /// + public void SelectNone() + { + ClearSelection(); + } + + /// + /// + /// + public void SelectReverse() + { + CheckVirtualList(); + + int last = -1; + if (_virtual) + { + int cnt = _realNumItems; + for (int i = 0; i < cnt; i++) + { + ItemInfo ii = _virtualItems[i]; + if ((ii.obj is GButton)) + { + ((GButton)ii.obj).selected = !((GButton)ii.obj).selected; + if (((GButton)ii.obj).selected) + last = i; + } + ii.selected = !ii.selected; + } + } + else + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + GButton obj = _children[i].asButton; + if (obj != null) + { + obj.selected = !obj.selected; + if (obj.selected) + last = i; + } + } + } + + if (last != -1) + UpdateSelectionController(last); + } + + /// + /// + /// + /// + public void EnableSelectionFocusEvents(bool enabled) + { + if (((_miscFlags & 2) != 0) == enabled) + return; + + if (enabled) + { + _miscFlags |= 2; + this.tabStopChildren = true; + onFocusIn.Add(NotifySelection); + onFocusOut.Add(NotifySelection); + } + else + { + _miscFlags &= 0xFD; + onFocusIn.Remove(NotifySelection); + onFocusOut.Remove(NotifySelection); + } + } + + void NotifySelection(EventContext context) + { + string eventType = context.type == "onFocusIn" ? "onListFocusIn" : "onListFocusOut"; + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + GButton obj = _children[i].asButton; + if (obj != null && obj.selected) + obj.DispatchEvent(eventType); + } + } + + /// + /// + /// + public void EnableArrowKeyNavigation(bool enabled) + { + if (enabled) + { + this.tabStopChildren = true; + onKeyDown.Add(__keydown); + } + else + { + this.tabStopChildren = false; + onKeyDown.Remove(__keydown); + } + } + + void __keydown(EventContext context) + { + int index = -1; + switch (context.inputEvent.keyCode) + { + case KeyCode.LeftArrow: + index = HandleArrowKey(7); + break; + + case KeyCode.RightArrow: + index = HandleArrowKey(3); + break; + + case KeyCode.UpArrow: + index = HandleArrowKey(1); + break; + + case KeyCode.DownArrow: + index = HandleArrowKey(5); + break; + } + + if (index != -1) + { + index = ItemIndexToChildIndex(index); + if (index != -1) + DispatchItemEvent(GetChildAt(index), context); + + context.StopPropagation(); + } + } + + /// + /// + /// + /// + public int HandleArrowKey(int dir) + { + int curIndex = this.selectedIndex; + if (curIndex == -1) + return -1; + + int index = curIndex; + switch (dir) + { + case 1://up + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowVertical) + { + index--; + } + else if (_layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) + { + if (_virtual) + { + index -= _curLineItemCount; + } + else + { + GObject current = _children[index]; + int k = 0; + int i; + for (i = index - 1; i >= 0; i--) + { + GObject obj = _children[i]; + if (obj.y != current.y) + { + current = obj; + break; + } + k++; + } + for (; i >= 0; i--) + { + GObject obj = _children[i]; + if (obj.y != current.y) + { + index = i + k + 1; + break; + } + } + } + } + break; + + case 3://right + if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) + { + index++; + } + else if (_layout == ListLayoutType.FlowVertical) + { + if (_virtual) + { + index += _curLineItemCount; + } + else + { + GObject current = _children[index]; + int k = 0; + int cnt = _children.Count; + int i; + for (i = index + 1; i < cnt; i++) + { + GObject obj = _children[i]; + if (obj.x != current.x) + { + current = obj; + break; + } + k++; + } + for (; i < cnt; i++) + { + GObject obj = _children[i]; + if (obj.x != current.x) + { + index = i - k - 1; + break; + } + } + } + } + break; + + case 5://down + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowVertical) + { + index++; + } + else if (_layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) + { + if (_virtual) + { + index += _curLineItemCount; + } + else + { + GObject current = _children[index]; + int k = 0; + int cnt = _children.Count; + int i; + for (i = index + 1; i < cnt; i++) + { + GObject obj = _children[i]; + if (obj.y != current.y) + { + current = obj; + break; + } + k++; + } + for (; i < cnt; i++) + { + GObject obj = _children[i]; + if (obj.y != current.y) + { + index = i - k - 1; + break; + } + } + } + } + break; + + case 7://left + if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.Pagination) + { + index--; + } + else if (_layout == ListLayoutType.FlowVertical) + { + if (_virtual) + { + index -= _curLineItemCount; + } + else + { + GObject current = _children[index]; + int k = 0; + int i; + for (i = index - 1; i >= 0; i--) + { + GObject obj = _children[i]; + if (obj.x != current.x) + { + current = obj; + break; + } + k++; + } + for (; i >= 0; i--) + { + GObject obj = _children[i]; + if (obj.x != current.x) + { + index = i + k + 1; + break; + } + } + } + } + break; + } + + if (index != curIndex && index >= 0 && index < this.numItems) + { + ClearSelection(); + AddSelection(index, true); + return index; + } + else + return -1; + } + + void __clickItem(EventContext context) + { + GObject item = context.sender as GObject; + if ((item is GButton) && selectionMode != ListSelectionMode.None) + SetSelectionOnEvent(item, context.inputEvent); + + if (scrollPane != null && scrollItemToViewOnClick) + scrollPane.ScrollToView(item, true); + + DispatchItemEvent(item, context); + } + + virtual protected void DispatchItemEvent(GObject item, EventContext context) + { + if (context.type == item.onRightClick.type) + DispatchEvent("onRightClickItem", item); + else + DispatchEvent("onClickItem", item); + } + + void SetSelectionOnEvent(GObject item, InputEvent evt) + { + bool dontChangeLastIndex = false; + GButton button = (GButton)item; + int index = ChildIndexToItemIndex(GetChildIndex(item)); + + if (selectionMode == ListSelectionMode.Single) + { + if (!button.selected) + { + ClearSelectionExcept(button); + button.selected = true; + } + } + else + { + if (evt.shift) + { + if (!button.selected) + { + if (_lastSelectedIndex != -1) + { + int min = Math.Min(_lastSelectedIndex, index); + int max = Math.Max(_lastSelectedIndex, index); + max = Math.Min(max, this.numItems - 1); + if (_virtual) + { + for (int i = min; i <= max; i++) + { + ItemInfo ii = _virtualItems[i]; + if (ii.obj is GButton) + ((GButton)ii.obj).selected = true; + ii.selected = true; + } + } + else + { + for (int i = min; i <= max; i++) + { + GButton obj = GetChildAt(i).asButton; + if (obj != null && !obj.selected) + obj.selected = true; + } + } + + dontChangeLastIndex = true; + } + else + { + button.selected = true; + } + } + } + else if (evt.ctrlOrCmd || selectionMode == ListSelectionMode.Multiple_SingleClick) + { + button.selected = !button.selected; + } + else + { + if (!button.selected) + { + ClearSelectionExcept(button); + button.selected = true; + } + else if (evt.button == 0) + ClearSelectionExcept(button); + } + } + + if (!dontChangeLastIndex) + _lastSelectedIndex = index; + + if (button.selected) + UpdateSelectionController(index); + } + + /// + /// Resize to list size to fit specified item count. + /// If list layout is single column or flow horizontally, the height will change to fit. + /// If list layout is single row or flow vertically, the width will change to fit. + /// + public void ResizeToFit() + { + ResizeToFit(int.MaxValue, 0); + } + + /// + /// Resize to list size to fit specified item count. + /// If list layout is single column or flow horizontally, the height will change to fit. + /// If list layout is single row or flow vertically, the width will change to fit. + /// + /// Item count + public void ResizeToFit(int itemCount) + { + ResizeToFit(itemCount, 0); + } + + /// + /// Resize to list size to fit specified item count. + /// If list layout is single column or flow horizontally, the height will change to fit. + /// If list layout is single row or flow vertically, the width will change to fit. + /// + /// >Item count + /// If the result size if smaller than minSize, then use minSize. + public void ResizeToFit(int itemCount, int minSize) + { + EnsureBoundsCorrect(); + + int curCount = this.numItems; + if (itemCount > curCount) + itemCount = curCount; + + if (_virtual) + { + int lineCount = Mathf.CeilToInt((float)itemCount / _curLineItemCount); + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + this.viewHeight = lineCount * _itemSize.y + Math.Max(0, lineCount - 1) * _lineGap; + else + this.viewWidth = lineCount * _itemSize.x + Math.Max(0, lineCount - 1) * _columnGap; + } + else if (itemCount == 0) + { + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + this.viewHeight = minSize; + else + this.viewWidth = minSize; + } + else + { + int i = itemCount - 1; + GObject obj = null; + while (i >= 0) + { + obj = this.GetChildAt(i); + if (!foldInvisibleItems || obj.visible) + break; + i--; + } + if (i < 0) + { + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + this.viewHeight = minSize; + else + this.viewWidth = minSize; + } + else + { + float size; + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + { + size = obj.y + obj.height; + if (size < minSize) + size = minSize; + this.viewHeight = size; + } + else + { + size = obj.x + obj.width; + if (size < minSize) + size = minSize; + this.viewWidth = size; + } + } + } + } + + /// + /// + /// + override protected void HandleSizeChanged() + { + base.HandleSizeChanged(); + + SetBoundsChangedFlag(); + if (_virtual) + SetVirtualListChangedFlag(true); + } + + override public void HandleControllerChanged(Controller c) + { + base.HandleControllerChanged(c); + + if (_selectionController == c) + this.selectedIndex = c.selectedIndex; + } + + void UpdateSelectionController(int index) + { + if (_selectionController != null && !_selectionController.changing + && index < _selectionController.pageCount) + { + Controller c = _selectionController; + _selectionController = null; + c.selectedIndex = index; + _selectionController = c; + } + } + + /// + /// Scroll the list to make an item with certain index visible. + /// + /// Item index + public void ScrollToView(int index) + { + ScrollToView(index, false); + } + + /// + /// Scroll the list to make an item with certain index visible. + /// + /// Item index + /// True to scroll smoothly, othewise immdediately. + public void ScrollToView(int index, bool ani) + { + ScrollToView(index, ani, false); + } + + /// + /// Scroll the list to make an item with certain index visible. + /// + /// Item index + /// True to scroll smoothly, othewise immdediately. + /// If true, scroll to make the target on the top/left; If false, scroll to make the target any position in view. + public void ScrollToView(int index, bool ani, bool setFirst) + { + if (_virtual) + { + if (_numItems == 0) + return; + + CheckVirtualList(); + + if (index >= _virtualItems.Count) + throw new Exception("Invalid child index: " + index + ">" + _virtualItems.Count); + + if (_loop) + index = Mathf.FloorToInt((float)_firstIndex / _numItems) * _numItems + index; + + Rect rect; + ItemInfo ii = _virtualItems[index]; + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + { + float pos = 0; + for (int i = _curLineItemCount - 1; i < index; i += _curLineItemCount) + pos += _virtualItems[i].size.y + _lineGap; + rect = new Rect(0, pos, _itemSize.x, ii.size.y); + } + else if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowVertical) + { + float pos = 0; + for (int i = _curLineItemCount - 1; i < index; i += _curLineItemCount) + pos += _virtualItems[i].size.x + _columnGap; + rect = new Rect(pos, 0, ii.size.x, _itemSize.y); + } + else + { + int page = index / (_curLineItemCount * _curLineItemCount2); + rect = new Rect(page * viewWidth + (index % _curLineItemCount) * (ii.size.x + _columnGap), + (index / _curLineItemCount) % _curLineItemCount2 * (ii.size.y + _lineGap), + ii.size.x, ii.size.y); + } + + if (this.scrollPane != null) + scrollPane.ScrollToView(rect, ani, setFirst); + else if (parent != null && parent.scrollPane != null) + parent.scrollPane.ScrollToView(this.TransformRect(rect, parent), ani, setFirst); + } + else + { + GObject obj = GetChildAt(index); + if (this.scrollPane != null) + scrollPane.ScrollToView(obj, ani, setFirst); + else if (parent != null && parent.scrollPane != null) + parent.scrollPane.ScrollToView(obj, ani, setFirst); + } + } + + /// + /// 获取当前点击哪个item + /// + public GObject touchItem + { + get + { + //find out which item is under finger + //逐层往上知道查到点击了那个item + GObject obj = GRoot.inst.touchTarget; + GObject p = obj.parent; + while (p != null) + { + if (p == this) + return obj; + + obj = p; + p = p.parent; + } + + return null; + } + } + + /// + /// Get first child in view. + /// + /// + public override int GetFirstChildInView() + { + return ChildIndexToItemIndex(base.GetFirstChildInView()); + } + + public int ChildIndexToItemIndex(int index) + { + if (!_virtual) + return index; + + if (_layout == ListLayoutType.Pagination) + { + for (int i = _firstIndex; i < _realNumItems; i++) + { + if (_virtualItems[i].obj != null) + { + index--; + if (index < 0) + return i; + } + } + + return index; + } + else + { + index += _firstIndex; + if (_loop && _numItems > 0) + index = index % _numItems; + + return index; + } + } + + public int ItemIndexToChildIndex(int index) + { + if (!_virtual) + return index; + + if (_layout == ListLayoutType.Pagination) + { + return GetChildIndex(_virtualItems[index].obj); + } + else + { + if (_loop && _numItems > 0) + { + int j = _firstIndex % _numItems; + if (index >= j) + index = index - j; + else + index = _numItems - j + index; + } + else + index -= _firstIndex; + + return index; + } + } + + + /// + /// Set the list to be virtual list. + /// 设置列表为虚拟列表模式。在虚拟列表模式下,列表不会为每一条列表数据创建一个实体对象,而是根据视口大小创建最小量的显示对象,然后通过itemRenderer指定的回调函数设置列表数据。 + /// 在虚拟模式下,你不能通过AddChild、RemoveChild等方式管理列表,只能通过设置numItems设置列表数据的长度。 + /// 如果要刷新列表,可以通过重新设置numItems,或者调用RefreshVirtualList完成。 + /// ‘单行’或者‘单列’的列表布局可支持不等高的列表项目。 + /// 除了‘页面’的列表布局,其他布局均支持使用不同资源构建列表项目,你可以在itemProvider里返回。如果不提供,默认使用defaultItem。 + /// + public void SetVirtual() + { + SetVirtual(false); + } + + public bool isVirtual + { + get { return _virtual; } + } + + /// + /// Set the list to be virtual list, and has loop behavior. + /// + public void SetVirtualAndLoop() + { + SetVirtual(true); + } + + void SetVirtual(bool loop) + { + if (!_virtual) + { + if (this.scrollPane == null) + Debug.LogError("FairyGUI: Virtual list must be scrollable!"); + + if (loop) + { + if (_layout == ListLayoutType.FlowHorizontal || _layout == ListLayoutType.FlowVertical) + Debug.LogError("FairyGUI: Loop list is not supported for FlowHorizontal or FlowVertical layout!"); + + this.scrollPane.bouncebackEffect = false; + } + + _virtual = true; + _loop = loop; + _virtualItems = new List(); + RemoveChildrenToPool(); + + if (_itemSize.x == 0 || _itemSize.y == 0) + { + GObject obj = GetFromPool(null); + if (obj == null) + { + Debug.LogError("FairyGUI: Virtual List must have a default list item resource."); + _itemSize = new Vector2(100, 100); + } + else + { + _itemSize = obj.size; + _itemSize.x = Mathf.CeilToInt(_itemSize.x); + _itemSize.y = Mathf.CeilToInt(_itemSize.y); + ReturnToPool(obj); + } + } + + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + { + this.scrollPane.scrollStep = _itemSize.y; + if (_loop) + this.scrollPane._loop = 2; + } + else + { + this.scrollPane.scrollStep = _itemSize.x; + if (_loop) + this.scrollPane._loop = 1; + } + + this.scrollPane.onScroll.AddCapture(__scrolled); + SetVirtualListChangedFlag(true); + } + } + + /// + /// Set the list item count. + /// If the list is not virtual, specified number of items will be created. + /// If the list is virtual, only items in view will be created. + /// + public int numItems + { + get + { + if (_virtual) + return _numItems; + else + return _children.Count; + } + set + { + if (_virtual) + { + if (itemRenderer == null) + throw new Exception("FairyGUI: Set itemRenderer first!"); + + _numItems = value; + if (_loop) + _realNumItems = _numItems * 6;//设置6倍数量,用于循环滚动 + else + _realNumItems = _numItems; + + //_virtualItems的设计是只增不减的 + int oldCount = _virtualItems.Count; + if (_realNumItems > oldCount) + { + for (int i = oldCount; i < _realNumItems; i++) + { + ItemInfo ii = new ItemInfo(); + ii.size = _itemSize; + + _virtualItems.Add(ii); + } + } + else + { + for (int i = _realNumItems; i < oldCount; i++) + _virtualItems[i].selected = false; + } + + if (_virtualListChanged != 0) + Timers.inst.Remove(this.RefreshVirtualList); + //立即刷新 + this.RefreshVirtualList(null); + } + else + { + int cnt = _children.Count; + if (value > cnt) + { + for (int i = cnt; i < value; i++) + { + if (itemProvider == null) + AddItemFromPool(); + else + AddItemFromPool(itemProvider(i)); + } + } + else + { + RemoveChildrenToPool(value, cnt); + } + + if (itemRenderer != null) + { + for (int i = 0; i < value; i++) + itemRenderer(i, GetChildAt(i)); + } + } + } + } + + public void RefreshVirtualList() + { + if (!_virtual) + throw new Exception("FairyGUI: not virtual list"); + + SetVirtualListChangedFlag(false); + } + + void CheckVirtualList() + { + if (_virtualListChanged != 0) + { + this.RefreshVirtualList(null); + Timers.inst.Remove(this.RefreshVirtualList); + } + } + + void SetVirtualListChangedFlag(bool layoutChanged) + { + if (layoutChanged) + _virtualListChanged = 2; + else if (_virtualListChanged == 0) + _virtualListChanged = 1; + + Timers.inst.CallLater(RefreshVirtualList); + } + + void RefreshVirtualList(object param) + { + bool layoutChanged = _virtualListChanged == 2; + _virtualListChanged = 0; + _miscFlags |= 1; + + if (layoutChanged) + { + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.SingleRow) + _curLineItemCount = 1; + else if (_layout == ListLayoutType.FlowHorizontal) + { + if (_columnCount > 0) + _curLineItemCount = _columnCount; + else + { + _curLineItemCount = Mathf.FloorToInt((this.scrollPane.viewWidth + _columnGap) / (_itemSize.x + _columnGap)); + if (_curLineItemCount <= 0) + _curLineItemCount = 1; + } + } + else if (_layout == ListLayoutType.FlowVertical) + { + if (_lineCount > 0) + _curLineItemCount = _lineCount; + else + { + _curLineItemCount = Mathf.FloorToInt((this.scrollPane.viewHeight + _lineGap) / (_itemSize.y + _lineGap)); + if (_curLineItemCount <= 0) + _curLineItemCount = 1; + } + } + else //pagination + { + if (_columnCount > 0) + _curLineItemCount = _columnCount; + else + { + _curLineItemCount = Mathf.FloorToInt((this.scrollPane.viewWidth + _columnGap) / (_itemSize.x + _columnGap)); + if (_curLineItemCount <= 0) + _curLineItemCount = 1; + } + + if (_lineCount > 0) + _curLineItemCount2 = _lineCount; + else + { + _curLineItemCount2 = Mathf.FloorToInt((this.scrollPane.viewHeight + _lineGap) / (_itemSize.y + _lineGap)); + if (_curLineItemCount2 <= 0) + _curLineItemCount2 = 1; + } + } + } + + float ch = 0, cw = 0; + if (_realNumItems > 0) + { + int len = Mathf.CeilToInt((float)_realNumItems / _curLineItemCount) * _curLineItemCount; + int len2 = Math.Min(_curLineItemCount, _realNumItems); + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + { + for (int i = 0; i < len; i += _curLineItemCount) + ch += _virtualItems[i].size.y + _lineGap; + if (ch > 0) + ch -= _lineGap; + + if (_autoResizeItem) + cw = scrollPane.viewWidth; + else + { + for (int i = 0; i < len2; i++) + cw += _virtualItems[i].size.x + _columnGap; + if (cw > 0) + cw -= _columnGap; + } + } + else if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowVertical) + { + for (int i = 0; i < len; i += _curLineItemCount) + cw += _virtualItems[i].size.x + _columnGap; + if (cw > 0) + cw -= _columnGap; + + if (_autoResizeItem) + ch = this.scrollPane.viewHeight; + else + { + for (int i = 0; i < len2; i++) + ch += _virtualItems[i].size.y + _lineGap; + if (ch > 0) + ch -= _lineGap; + } + } + else + { + int pageCount = Mathf.CeilToInt((float)len / (_curLineItemCount * _curLineItemCount2)); + cw = pageCount * viewWidth; + ch = viewHeight; + } + } + + HandleAlign(cw, ch); + this.scrollPane.SetContentSize(cw, ch); + + _miscFlags &= 0xFE; + + HandleScroll(true); + } + + void __scrolled(EventContext context) + { + HandleScroll(false); + } + + int GetIndexOnPos1(ref float pos, bool forceUpdate) + { + if (_realNumItems < _curLineItemCount) + { + pos = 0; + return 0; + } + + if (numChildren > 0 && !forceUpdate) + { + float pos2 = this.GetChildAt(0).y; + if (pos2 + (_lineGap > 0 ? 0 : -_lineGap) > pos) + { + for (int i = _firstIndex - _curLineItemCount; i >= 0; i -= _curLineItemCount) + { + pos2 -= (_virtualItems[i].size.y + _lineGap); + if (pos2 <= pos) + { + pos = pos2; + return i; + } + } + + pos = 0; + return 0; + } + else + { + float testGap = _lineGap > 0 ? _lineGap : 0; + for (int i = _firstIndex; i < _realNumItems; i += _curLineItemCount) + { + float pos3 = pos2 + _virtualItems[i].size.y; + if (pos3 + testGap > pos) + { + pos = pos2; + return i; + } + pos2 = pos3 + _lineGap; + } + + pos = pos2; + return _realNumItems - _curLineItemCount; + } + } + else + { + float pos2 = 0; + float testGap = _lineGap > 0 ? _lineGap : 0; + for (int i = 0; i < _realNumItems; i += _curLineItemCount) + { + float pos3 = pos2 + _virtualItems[i].size.y; + if (pos3 + testGap > pos) + { + pos = pos2; + return i; + } + pos2 = pos3 + _lineGap; + } + + pos = pos2; + return _realNumItems - _curLineItemCount; + } + } + + int GetIndexOnPos2(ref float pos, bool forceUpdate) + { + if (_realNumItems < _curLineItemCount) + { + pos = 0; + return 0; + } + + if (numChildren > 0 && !forceUpdate) + { + float pos2 = this.GetChildAt(0).x; + if (pos2 + (_columnGap > 0 ? 0 : -_columnGap) > pos) + { + for (int i = _firstIndex - _curLineItemCount; i >= 0; i -= _curLineItemCount) + { + pos2 -= (_virtualItems[i].size.x + _columnGap); + if (pos2 <= pos) + { + pos = pos2; + return i; + } + } + + pos = 0; + return 0; + } + else + { + float testGap = _columnGap > 0 ? _columnGap : 0; + for (int i = _firstIndex; i < _realNumItems; i += _curLineItemCount) + { + float pos3 = pos2 + _virtualItems[i].size.x; + if (pos3 + testGap > pos) + { + pos = pos2; + return i; + } + pos2 = pos3 + _columnGap; + } + + pos = pos2; + return _realNumItems - _curLineItemCount; + } + } + else + { + float pos2 = 0; + float testGap = _columnGap > 0 ? _columnGap : 0; + for (int i = 0; i < _realNumItems; i += _curLineItemCount) + { + float pos3 = pos2 + _virtualItems[i].size.x; + if (pos3 + testGap > pos) + { + pos = pos2; + return i; + } + pos2 = pos3 + _columnGap; + } + + pos = pos2; + return _realNumItems - _curLineItemCount; + } + } + + int GetIndexOnPos3(ref float pos, bool forceUpdate) + { + if (_realNumItems < _curLineItemCount) + { + pos = 0; + return 0; + } + + float viewWidth = this.viewWidth; + int page = Mathf.FloorToInt(pos / viewWidth); + int startIndex = page * (_curLineItemCount * _curLineItemCount2); + float pos2 = page * viewWidth; + float testGap = _columnGap > 0 ? _columnGap : 0; + for (int i = 0; i < _curLineItemCount; i++) + { + float pos3 = pos2 + _virtualItems[startIndex + i].size.x; + if (pos3 + testGap > pos) + { + pos = pos2; + return startIndex + i; + } + pos2 = pos3 + _columnGap; + } + + pos = pos2; + return startIndex + _curLineItemCount - 1; + } + + void HandleScroll(bool forceUpdate) + { + if ((_miscFlags & 1) != 0) + return; + + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + { + int enterCounter = 0; + while (HandleScroll1(forceUpdate)) + { + //可能会因为ITEM资源改变导致ITEM大小发生改变,所有出现最后一页填不满的情况,这时要反复尝试填满。 + enterCounter++; + forceUpdate = false; + if (enterCounter > 20) + { + Debug.Log("FairyGUI: list will never be filled as the item renderer function always returns a different size."); + break; + } + } + + HandleArchOrder1(); + } + else if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowVertical) + { + int enterCounter = 0; + while (HandleScroll2(forceUpdate)) + { + enterCounter++; + forceUpdate = false; + if (enterCounter > 20) + { + Debug.Log("FairyGUI: list will never be filled as the item renderer function always returns a different size."); + break; + } + } + + HandleArchOrder2(); + } + else + { + HandleScroll3(forceUpdate); + } + + _boundsChanged = false; + } + + bool HandleScroll1(bool forceUpdate) + { + float pos = scrollPane.scrollingPosY; + float max = pos + scrollPane.viewHeight; + bool end = max == scrollPane.contentHeight;//这个标志表示当前需要滚动到最末,无论内容变化大小 + + //寻找当前位置的第一条项目 + int newFirstIndex = GetIndexOnPos1(ref pos, forceUpdate); + if (newFirstIndex == _firstIndex && !forceUpdate) + return false; + + int oldFirstIndex = _firstIndex; + _firstIndex = newFirstIndex; + int curIndex = newFirstIndex; + bool forward = oldFirstIndex > newFirstIndex; + int childCount = this.numChildren; + int lastIndex = oldFirstIndex + childCount - 1; + int reuseIndex = forward ? lastIndex : oldFirstIndex; + float curX = 0, curY = pos; + bool needRender; + float deltaSize = 0; + float firstItemDeltaSize = 0; + string url = _defaultItem; + int partSize = (int)((scrollPane.viewWidth - _columnGap * (_curLineItemCount - 1)) / _curLineItemCount); + + itemInfoVer++; + while (curIndex < _realNumItems && (end || curY < max)) + { + ItemInfo ii = _virtualItems[curIndex]; + + if (ii.obj == null || forceUpdate) + { + if (itemProvider != null) + { + url = itemProvider(curIndex % _numItems); + if (url == null) + url = _defaultItem; + url = UIPackage.NormalizeURL(url); + } + + if (ii.obj != null && ii.obj.resourceURL != url) + { + if (ii.obj is GButton) + ii.selected = ((GButton)ii.obj).selected; + RemoveChildToPool(ii.obj); + ii.obj = null; + } + } + + if (ii.obj == null) + { + //搜索最适合的重用item,保证每次刷新需要新建或者重新render的item最少 + if (forward) + { + for (int j = reuseIndex; j >= oldFirstIndex; j--) + { + ItemInfo ii2 = _virtualItems[j]; + if (ii2.obj != null && ii2.updateFlag != itemInfoVer && ii2.obj.resourceURL == url) + { + if (ii2.obj is GButton) + ii2.selected = ((GButton)ii2.obj).selected; + ii.obj = ii2.obj; + ii2.obj = null; + if (j == reuseIndex) + reuseIndex--; + break; + } + } + } + else + { + for (int j = reuseIndex; j <= lastIndex; j++) + { + ItemInfo ii2 = _virtualItems[j]; + if (ii2.obj != null && ii2.updateFlag != itemInfoVer && ii2.obj.resourceURL == url) + { + if (ii2.obj is GButton) + ii2.selected = ((GButton)ii2.obj).selected; + ii.obj = ii2.obj; + ii2.obj = null; + if (j == reuseIndex) + reuseIndex++; + break; + } + } + } + + if (ii.obj != null) + { + SetChildIndex(ii.obj, forward ? curIndex - newFirstIndex : numChildren); + } + else + { + ii.obj = _pool.GetObject(url); + if (forward) + this.AddChildAt(ii.obj, curIndex - newFirstIndex); + else + this.AddChild(ii.obj); + } + if (ii.obj is GButton) + ((GButton)ii.obj).selected = ii.selected; + + needRender = true; + } + else + needRender = forceUpdate; + + if (needRender) + { + if (_autoResizeItem && (_layout == ListLayoutType.SingleColumn || _columnCount > 0)) + ii.obj.SetSize(partSize, ii.obj.height, true); + + itemRenderer(curIndex % _numItems, ii.obj); + if (curIndex % _curLineItemCount == 0) + { + deltaSize += Mathf.CeilToInt(ii.obj.size.y) - ii.size.y; + if (curIndex == newFirstIndex && oldFirstIndex > newFirstIndex) + { + //当内容向下滚动时,如果新出现的项目大小发生变化,需要做一个位置补偿,才不会导致滚动跳动 + firstItemDeltaSize = Mathf.CeilToInt(ii.obj.size.y) - ii.size.y; + } + } + ii.size.x = Mathf.CeilToInt(ii.obj.size.x); + ii.size.y = Mathf.CeilToInt(ii.obj.size.y); + } + + ii.updateFlag = itemInfoVer; + ii.obj.SetXY(curX, curY); + if (curIndex == newFirstIndex) //要显示多一条才不会穿帮 + max += ii.size.y; + + curX += ii.size.x + _columnGap; + + if (curIndex % _curLineItemCount == _curLineItemCount - 1) + { + curX = 0; + curY += ii.size.y + _lineGap; + } + curIndex++; + } + + for (int i = 0; i < childCount; i++) + { + ItemInfo ii = _virtualItems[oldFirstIndex + i]; + if (ii.updateFlag != itemInfoVer && ii.obj != null) + { + if (ii.obj is GButton) + ii.selected = ((GButton)ii.obj).selected; + RemoveChildToPool(ii.obj); + ii.obj = null; + } + } + + childCount = _children.Count; + for (int i = 0; i < childCount; i++) + { + GObject obj = _virtualItems[newFirstIndex + i].obj; + if (_children[i] != obj) + SetChildIndex(obj, i); + } + + if (deltaSize != 0 || firstItemDeltaSize != 0) + this.scrollPane.ChangeContentSizeOnScrolling(0, deltaSize, 0, firstItemDeltaSize); + + if (curIndex > 0 && this.numChildren > 0 && this.container.y <= 0 && GetChildAt(0).y > -this.container.y)//最后一页没填满! + return true; + else + return false; + } + + bool HandleScroll2(bool forceUpdate) + { + float pos = scrollPane.scrollingPosX; + float max = pos + scrollPane.viewWidth; + bool end = pos == scrollPane.contentWidth;//这个标志表示当前需要滚动到最末,无论内容变化大小 + + //寻找当前位置的第一条项目 + int newFirstIndex = GetIndexOnPos2(ref pos, forceUpdate); + if (newFirstIndex == _firstIndex && !forceUpdate) + return false; + + int oldFirstIndex = _firstIndex; + _firstIndex = newFirstIndex; + int curIndex = newFirstIndex; + bool forward = oldFirstIndex > newFirstIndex; + int childCount = this.numChildren; + int lastIndex = oldFirstIndex + childCount - 1; + int reuseIndex = forward ? lastIndex : oldFirstIndex; + float curX = pos, curY = 0; + bool needRender; + float deltaSize = 0; + float firstItemDeltaSize = 0; + string url = _defaultItem; + int partSize = (int)((scrollPane.viewHeight - _lineGap * (_curLineItemCount - 1)) / _curLineItemCount); + + itemInfoVer++; + while (curIndex < _realNumItems && (end || curX < max)) + { + ItemInfo ii = _virtualItems[curIndex]; + + if (ii.obj == null || forceUpdate) + { + if (itemProvider != null) + { + url = itemProvider(curIndex % _numItems); + if (url == null) + url = _defaultItem; + url = UIPackage.NormalizeURL(url); + } + + if (ii.obj != null && ii.obj.resourceURL != url) + { + if (ii.obj is GButton) + ii.selected = ((GButton)ii.obj).selected; + RemoveChildToPool(ii.obj); + ii.obj = null; + } + } + + if (ii.obj == null) + { + if (forward) + { + for (int j = reuseIndex; j >= oldFirstIndex; j--) + { + ItemInfo ii2 = _virtualItems[j]; + if (ii2.obj != null && ii2.updateFlag != itemInfoVer && ii2.obj.resourceURL == url) + { + if (ii2.obj is GButton) + ii2.selected = ((GButton)ii2.obj).selected; + ii.obj = ii2.obj; + ii2.obj = null; + if (j == reuseIndex) + reuseIndex--; + break; + } + } + } + else + { + for (int j = reuseIndex; j <= lastIndex; j++) + { + ItemInfo ii2 = _virtualItems[j]; + if (ii2.obj != null && ii2.updateFlag != itemInfoVer && ii2.obj.resourceURL == url) + { + if (ii2.obj is GButton) + ii2.selected = ((GButton)ii2.obj).selected; + ii.obj = ii2.obj; + ii2.obj = null; + if (j == reuseIndex) + reuseIndex++; + break; + } + } + } + + if (ii.obj != null) + { + SetChildIndex(ii.obj, forward ? curIndex - newFirstIndex : numChildren); + } + else + { + ii.obj = _pool.GetObject(url); + if (forward) + this.AddChildAt(ii.obj, curIndex - newFirstIndex); + else + this.AddChild(ii.obj); + } + if (ii.obj is GButton) + ((GButton)ii.obj).selected = ii.selected; + + needRender = true; + } + else + needRender = forceUpdate; + + if (needRender) + { + if (_autoResizeItem && (_layout == ListLayoutType.SingleRow || _lineCount > 0)) + ii.obj.SetSize(ii.obj.width, partSize, true); + + itemRenderer(curIndex % _numItems, ii.obj); + if (curIndex % _curLineItemCount == 0) + { + deltaSize += Mathf.CeilToInt(ii.obj.size.x) - ii.size.x; + if (curIndex == newFirstIndex && oldFirstIndex > newFirstIndex) + { + //当内容向下滚动时,如果新出现的一个项目大小发生变化,需要做一个位置补偿,才不会导致滚动跳动 + firstItemDeltaSize = Mathf.CeilToInt(ii.obj.size.x) - ii.size.x; + } + } + ii.size.x = Mathf.CeilToInt(ii.obj.size.x); + ii.size.y = Mathf.CeilToInt(ii.obj.size.y); + } + + ii.updateFlag = itemInfoVer; + ii.obj.SetXY(curX, curY); + if (curIndex == newFirstIndex) //要显示多一条才不会穿帮 + max += ii.size.x; + + curY += ii.size.y + _lineGap; + + if (curIndex % _curLineItemCount == _curLineItemCount - 1) + { + curY = 0; + curX += ii.size.x + _columnGap; + } + curIndex++; + } + + for (int i = 0; i < childCount; i++) + { + ItemInfo ii = _virtualItems[oldFirstIndex + i]; + if (ii.updateFlag != itemInfoVer && ii.obj != null) + { + if (ii.obj is GButton) + ii.selected = ((GButton)ii.obj).selected; + RemoveChildToPool(ii.obj); + ii.obj = null; + } + } + + childCount = _children.Count; + for (int i = 0; i < childCount; i++) + { + GObject obj = _virtualItems[newFirstIndex + i].obj; + if (_children[i] != obj) + SetChildIndex(obj, i); + } + + if (deltaSize != 0 || firstItemDeltaSize != 0) + this.scrollPane.ChangeContentSizeOnScrolling(deltaSize, 0, firstItemDeltaSize, 0); + + if (curIndex > 0 && this.numChildren > 0 && this.container.x <= 0 && GetChildAt(0).x > -this.container.x)//最后一页没填满! + return true; + else + return false; + } + + void HandleScroll3(bool forceUpdate) + { + float pos = scrollPane.scrollingPosX; + + //寻找当前位置的第一条项目 + int newFirstIndex = GetIndexOnPos3(ref pos, forceUpdate); + if (newFirstIndex == _firstIndex && !forceUpdate) + return; + + int oldFirstIndex = _firstIndex; + _firstIndex = newFirstIndex; + + //分页模式不支持不等高,所以渲染满一页就好了 + + int reuseIndex = oldFirstIndex; + int virtualItemCount = _virtualItems.Count; + int pageSize = _curLineItemCount * _curLineItemCount2; + int startCol = newFirstIndex % _curLineItemCount; + float viewWidth = this.viewWidth; + int page = (int)(newFirstIndex / pageSize); + int startIndex = page * pageSize; + int lastIndex = startIndex + pageSize * 2; //测试两页 + bool needRender; + string url = _defaultItem; + int partWidth = (int)((scrollPane.viewWidth - _columnGap * (_curLineItemCount - 1)) / _curLineItemCount); + int partHeight = (int)((scrollPane.viewHeight - _lineGap * (_curLineItemCount2 - 1)) / _curLineItemCount2); + itemInfoVer++; + + //先标记这次要用到的项目 + for (int i = startIndex; i < lastIndex; i++) + { + if (i >= _realNumItems) + continue; + + int col = i % _curLineItemCount; + if (i - startIndex < pageSize) + { + if (col < startCol) + continue; + } + else + { + if (col > startCol) + continue; + } + + ItemInfo ii = _virtualItems[i]; + ii.updateFlag = itemInfoVer; + } + + GObject lastObj = null; + int insertIndex = 0; + for (int i = startIndex; i < lastIndex; i++) + { + if (i >= _realNumItems) + continue; + + ItemInfo ii = _virtualItems[i]; + if (ii.updateFlag != itemInfoVer) + continue; + + if (ii.obj == null) + { + //寻找看有没有可重用的 + while (reuseIndex < virtualItemCount) + { + ItemInfo ii2 = _virtualItems[reuseIndex]; + if (ii2.obj != null && ii2.updateFlag != itemInfoVer) + { + if (ii2.obj is GButton) + ii2.selected = ((GButton)ii2.obj).selected; + ii.obj = ii2.obj; + ii2.obj = null; + break; + } + reuseIndex++; + } + + if (insertIndex == -1) + insertIndex = GetChildIndex(lastObj) + 1; + + if (ii.obj == null) + { + if (itemProvider != null) + { + url = itemProvider(i % _numItems); + if (url == null) + url = _defaultItem; + url = UIPackage.NormalizeURL(url); + } + + ii.obj = _pool.GetObject(url); + this.AddChildAt(ii.obj, insertIndex); + } + else + { + insertIndex = SetChildIndexBefore(ii.obj, insertIndex); + } + insertIndex++; + + if (ii.obj is GButton) + ((GButton)ii.obj).selected = ii.selected; + + needRender = true; + } + else + { + needRender = forceUpdate; + insertIndex = -1; + lastObj = ii.obj; + } + + if (needRender) + { + if (_autoResizeItem) + { + if (_curLineItemCount == _columnCount && _curLineItemCount2 == _lineCount) + ii.obj.SetSize(partWidth, partHeight, true); + else if (_curLineItemCount == _columnCount) + ii.obj.SetSize(partWidth, ii.obj.height, true); + else if (_curLineItemCount2 == _lineCount) + ii.obj.SetSize(ii.obj.width, partHeight, true); + } + + itemRenderer(i % _numItems, ii.obj); + ii.size.x = Mathf.CeilToInt(ii.obj.size.x); + ii.size.y = Mathf.CeilToInt(ii.obj.size.y); + } + } + + //排列item + float borderX = (startIndex / pageSize) * viewWidth; + float xx = borderX; + float yy = 0; + float lineHeight = 0; + for (int i = startIndex; i < lastIndex; i++) + { + if (i >= _realNumItems) + continue; + + ItemInfo ii = _virtualItems[i]; + if (ii.updateFlag == itemInfoVer) + ii.obj.SetXY(xx, yy); + + if (ii.size.y > lineHeight) + lineHeight = ii.size.y; + if (i % _curLineItemCount == _curLineItemCount - 1) + { + xx = borderX; + yy += lineHeight + _lineGap; + lineHeight = 0; + + if (i == startIndex + pageSize - 1) + { + borderX += viewWidth; + xx = borderX; + yy = 0; + } + } + else + xx += ii.size.x + _columnGap; + } + + //释放未使用的 + for (int i = reuseIndex; i < virtualItemCount; i++) + { + ItemInfo ii = _virtualItems[i]; + if (ii.updateFlag != itemInfoVer && ii.obj != null) + { + if (ii.obj is GButton) + ii.selected = ((GButton)ii.obj).selected; + RemoveChildToPool(ii.obj); + ii.obj = null; + } + } + } + + void HandleArchOrder1() + { + if (this.childrenRenderOrder == ChildrenRenderOrder.Arch) + { + float mid = this.scrollPane.posY + this.viewHeight / 2; + float minDist = int.MaxValue, dist; + int apexIndex = 0; + int cnt = this.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject obj = GetChildAt(i); + if (!foldInvisibleItems || obj.visible) + { + dist = Mathf.Abs(mid - obj.y - obj.height / 2); + if (dist < minDist) + { + minDist = dist; + apexIndex = i; + } + } + } + this.apexIndex = apexIndex; + } + } + + void HandleArchOrder2() + { + if (this.childrenRenderOrder == ChildrenRenderOrder.Arch) + { + float mid = this.scrollPane.posX + this.viewWidth / 2; + float minDist = int.MaxValue, dist; + int apexIndex = 0; + int cnt = this.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject obj = GetChildAt(i); + if (!foldInvisibleItems || obj.visible) + { + dist = Mathf.Abs(mid - obj.x - obj.width / 2); + if (dist < minDist) + { + minDist = dist; + apexIndex = i; + } + } + } + this.apexIndex = apexIndex; + } + } + + override public void GetSnappingPositionWithDir(ref float xValue, ref float yValue, float xDir, float yDir) + { + if (_virtual) + { + if (_layout == ListLayoutType.SingleColumn || _layout == ListLayoutType.FlowHorizontal) + { + float saved = yValue; + int index = GetIndexOnPos1(ref yValue, false); + if (index < _virtualItems.Count && index < _realNumItems) + { + float size = _virtualItems[index].size.y; + if (ShouldSnapToNext(yDir, saved - yValue, size)) + yValue += size + _lineGap; + } + } + else if (_layout == ListLayoutType.SingleRow || _layout == ListLayoutType.FlowVertical) + { + float saved = xValue; + int index = GetIndexOnPos2(ref xValue, false); + if (index < _virtualItems.Count && index < _realNumItems) + { + float size = _virtualItems[index].size.x; + if (ShouldSnapToNext(xDir, saved - xValue, size)) + xValue += size + _columnGap; + } + } + else + { + float saved = xValue; + int index = GetIndexOnPos3(ref xValue, false); + if (index < _virtualItems.Count && index < _realNumItems) + { + float size = _virtualItems[index].size.x; + if (ShouldSnapToNext(xDir, saved - xValue, size)) + xValue += size + _columnGap; + } + } + } + else + base.GetSnappingPositionWithDir(ref xValue, ref yValue, xDir, yDir); + } + + private void HandleAlign(float contentWidth, float contentHeight) + { + Vector2 newOffset = Vector2.zero; + + if (contentHeight < viewHeight) + { + if (_verticalAlign == VertAlignType.Middle) + newOffset.y = (int)((viewHeight - contentHeight) / 2); + else if (_verticalAlign == VertAlignType.Bottom) + newOffset.y = viewHeight - contentHeight; + } + + if (contentWidth < this.viewWidth) + { + if (_align == AlignType.Center) + newOffset.x = (int)((viewWidth - contentWidth) / 2); + else if (_align == AlignType.Right) + newOffset.x = viewWidth - contentWidth; + } + + if (newOffset != _alignOffset) + { + _alignOffset = newOffset; + if (scrollPane != null) + scrollPane.AdjustMaskContainer(); + else + container.SetXY(_margin.left + _alignOffset.x, _margin.top + _alignOffset.y); + } + } + + override protected void UpdateBounds() + { + if (_virtual) + return; + + int cnt = _children.Count; + int i; + int j = 0; + GObject child; + float curX = 0; + float curY = 0; + float cw, ch; + float maxWidth = 0; + float maxHeight = 0; + float viewWidth = this.viewWidth; + float viewHeight = this.viewHeight; + + if (_layout == ListLayoutType.SingleColumn) + { + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + if (curY != 0) + curY += _lineGap; + child.y = curY; + if (_autoResizeItem) + child.SetSize(viewWidth, child.height, true); + curY += Mathf.CeilToInt(child.height); + if (child.width > maxWidth) + maxWidth = child.width; + } + + ch = curY; + if (ch <= viewHeight && _autoResizeItem && scrollPane != null && scrollPane._displayInDemand && scrollPane.vtScrollBar != null) + { + viewWidth += scrollPane.vtScrollBar.width; + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + child.SetSize(viewWidth, child.height, true); + } + } + cw = Mathf.CeilToInt(maxWidth); + } + else if (_layout == ListLayoutType.SingleRow) + { + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + if (curX != 0) + curX += _columnGap; + child.x = curX; + if (_autoResizeItem) + child.SetSize(child.width, viewHeight, true); + curX += Mathf.CeilToInt(child.width); + if (child.height > maxHeight) + maxHeight = child.height; + } + + cw = curX; + if (cw <= viewWidth && _autoResizeItem && scrollPane != null && scrollPane._displayInDemand && scrollPane.hzScrollBar != null) + { + viewHeight += scrollPane.hzScrollBar.height; + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + child.SetSize(child.width, viewHeight, true); + } + } + ch = Mathf.CeilToInt(maxHeight); + } + else if (_layout == ListLayoutType.FlowHorizontal) + { + if (_autoResizeItem && _columnCount > 0) + { + float lineSize = 0; + int lineStart = 0; + float remainSize; + float remainPercent; + + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + lineSize += child.sourceWidth; + j++; + if (j == _columnCount || i == cnt - 1) + { + remainSize = viewWidth - (j - 1) * _columnGap; + remainPercent = 1; + curX = 0; + for (j = lineStart; j <= i; j++) + { + child = GetChildAt(j); + if (foldInvisibleItems && !child.visible) + continue; + + child.SetXY(curX, curY); + float perc = child.sourceWidth / lineSize; + child.SetSize(Mathf.Round(perc / remainPercent * remainSize), child.height, true); + remainSize -= child.width; + remainPercent -= perc; + curX += child.width + _columnGap; + + if (child.height > maxHeight) + maxHeight = child.height; + } + //new line + curY += Mathf.CeilToInt(maxHeight) + _lineGap; + maxHeight = 0; + j = 0; + lineStart = i + 1; + lineSize = 0; + } + } + ch = curY + Mathf.CeilToInt(maxHeight); + cw = viewWidth; + } + else + { + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + if (curX != 0) + curX += _columnGap; + + if (_columnCount != 0 && j >= _columnCount + || _columnCount == 0 && curX + child.width > viewWidth && maxHeight != 0) + { + //new line + curX = 0; + curY += Mathf.CeilToInt(maxHeight) + _lineGap; + maxHeight = 0; + j = 0; + } + child.SetXY(curX, curY); + curX += Mathf.CeilToInt(child.width); + if (curX > maxWidth) + maxWidth = curX; + if (child.height > maxHeight) + maxHeight = child.height; + j++; + } + ch = curY + Mathf.CeilToInt(maxHeight); + cw = Mathf.CeilToInt(maxWidth); + } + } + else if (_layout == ListLayoutType.FlowVertical) + { + if (_autoResizeItem && _lineCount > 0) + { + float lineSize = 0; + int lineStart = 0; + float remainSize; + float remainPercent; + + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + lineSize += child.sourceHeight; + j++; + if (j == _lineCount || i == cnt - 1) + { + remainSize = viewHeight - (j - 1) * _lineGap; + remainPercent = 1; + curY = 0; + for (j = lineStart; j <= i; j++) + { + child = GetChildAt(j); + if (foldInvisibleItems && !child.visible) + continue; + + child.SetXY(curX, curY); + float perc = child.sourceHeight / lineSize; + child.SetSize(child.width, Mathf.Round(perc / remainPercent * remainSize), true); + remainSize -= child.height; + remainPercent -= perc; + curY += child.height + _lineGap; + + if (child.width > maxWidth) + maxWidth = child.width; + } + //new line + curX += Mathf.CeilToInt(maxWidth) + _columnGap; + maxWidth = 0; + j = 0; + lineStart = i + 1; + lineSize = 0; + } + } + cw = curX + Mathf.CeilToInt(maxWidth); + ch = viewHeight; + } + else + { + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + if (curY != 0) + curY += _lineGap; + + if (_lineCount != 0 && j >= _lineCount + || _lineCount == 0 && curY + child.height > viewHeight && maxWidth != 0) + { + curY = 0; + curX += Mathf.CeilToInt(maxWidth) + _columnGap; + maxWidth = 0; + j = 0; + } + child.SetXY(curX, curY); + curY += child.height; + if (curY > maxHeight) + maxHeight = curY; + if (child.width > maxWidth) + maxWidth = child.width; + j++; + } + cw = curX + Mathf.CeilToInt(maxWidth); + ch = Mathf.CeilToInt(maxHeight); + } + } + else //pagination + { + int page = 0; + int k = 0; + float eachHeight = 0; + if (_autoResizeItem && _lineCount > 0) + eachHeight = Mathf.Floor((viewHeight - (_lineCount - 1) * _lineGap) / _lineCount); + + if (_autoResizeItem && _columnCount > 0) + { + float lineSize = 0; + int lineStart = 0; + float remainSize; + float remainPercent; + + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + if (j == 0 && (_lineCount != 0 && k >= _lineCount + || _lineCount == 0 && curY + (_lineCount > 0 ? eachHeight : child.height) > viewHeight)) + { + //new page + page++; + curY = 0; + k = 0; + } + + lineSize += child.sourceWidth; + j++; + if (j == _columnCount || i == cnt - 1) + { + remainSize = viewWidth - (j - 1) * _columnGap; + remainPercent = 1; + curX = 0; + for (j = lineStart; j <= i; j++) + { + child = GetChildAt(j); + if (foldInvisibleItems && !child.visible) + continue; + + child.SetXY(page * viewWidth + curX, curY); + float perc = child.sourceWidth / lineSize; + child.SetSize(Mathf.Round(perc / remainPercent * remainSize), _lineCount > 0 ? eachHeight : child.height, true); + remainSize -= child.width; + remainPercent -= perc; + curX += child.width + _columnGap; + + if (child.height > maxHeight) + maxHeight = child.height; + } + //new line + curY += Mathf.CeilToInt(maxHeight) + _lineGap; + maxHeight = 0; + j = 0; + lineStart = i + 1; + lineSize = 0; + + k++; + } + } + } + else + { + for (i = 0; i < cnt; i++) + { + child = GetChildAt(i); + if (foldInvisibleItems && !child.visible) + continue; + + if (curX != 0) + curX += _columnGap; + + if (_autoResizeItem && _lineCount > 0) + child.SetSize(child.width, eachHeight, true); + + if (_columnCount != 0 && j >= _columnCount + || _columnCount == 0 && curX + child.width > viewWidth && maxHeight != 0) + { + curX = 0; + curY += maxHeight + _lineGap; + maxHeight = 0; + j = 0; + k++; + + if (_lineCount != 0 && k >= _lineCount + || _lineCount == 0 && curY + child.height > viewHeight && maxWidth != 0)//new page + { + page++; + curY = 0; + k = 0; + } + } + child.SetXY(page * viewWidth + curX, curY); + curX += Mathf.CeilToInt(child.width); + if (curX > maxWidth) + maxWidth = curX; + if (child.height > maxHeight) + maxHeight = child.height; + j++; + } + } + ch = page > 0 ? viewHeight : (curY + Mathf.CeilToInt(maxHeight)); + cw = (page + 1) * viewWidth; + } + + HandleAlign(cw, ch); + SetBounds(0, 0, cw, ch); + + InvalidateBatchingState(true); + } + + override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 5); + + _layout = (ListLayoutType)buffer.ReadByte(); + selectionMode = (ListSelectionMode)buffer.ReadByte(); + _align = (AlignType)buffer.ReadByte(); + _verticalAlign = (VertAlignType)buffer.ReadByte(); + _lineGap = buffer.ReadShort(); + _columnGap = buffer.ReadShort(); + _lineCount = buffer.ReadShort(); + _columnCount = buffer.ReadShort(); + _autoResizeItem = buffer.ReadBool(); + _childrenRenderOrder = (ChildrenRenderOrder)buffer.ReadByte(); + _apexIndex = buffer.ReadShort(); + + if (buffer.ReadBool()) + { + _margin.top = buffer.ReadInt(); + _margin.bottom = buffer.ReadInt(); + _margin.left = buffer.ReadInt(); + _margin.right = buffer.ReadInt(); + } + + OverflowType overflow = (OverflowType)buffer.ReadByte(); + if (overflow == OverflowType.Scroll) + { + int savedPos = buffer.position; + buffer.Seek(beginPos, 7); + SetupScroll(buffer); + buffer.position = savedPos; + } + else + SetupOverflow(overflow); + + if (buffer.ReadBool()) + { + int i1 = buffer.ReadInt(); + int i2 = buffer.ReadInt(); + this.clipSoftness = new Vector2(i1, i2); + } + + if (buffer.version >= 2) + { + scrollItemToViewOnClick = buffer.ReadBool(); + foldInvisibleItems = buffer.ReadBool(); + } + + buffer.Seek(beginPos, 8); + + _defaultItem = buffer.ReadS(); + ReadItems(buffer); + } + + virtual protected void ReadItems(ByteBuffer buffer) + { + int itemCount = buffer.ReadShort(); + for (int i = 0; i < itemCount; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + string str = buffer.ReadS(); + if (str == null) + { + str = _defaultItem; + if (string.IsNullOrEmpty(str)) + { + buffer.position = nextPos; + continue; + } + } + + GObject obj = GetFromPool(str); + if (obj != null) + { + AddChild(obj); + SetupItem(buffer, obj); + } + + buffer.position = nextPos; + } + } + + protected void SetupItem(ByteBuffer buffer, GObject obj) + { + string str; + str = buffer.ReadS(); + if (str != null) + obj.text = str; + str = buffer.ReadS(); + if (str != null && (obj is GButton)) + (obj as GButton).selectedTitle = str; + str = buffer.ReadS(); + if (str != null) + obj.icon = str; + str = buffer.ReadS(); + if (str != null && (obj is GButton)) + (obj as GButton).selectedIcon = str; + str = buffer.ReadS(); + if (str != null) + obj.name = str; + + if (obj is GComponent) + { + int cnt = buffer.ReadShort(); + for (int i = 0; i < cnt; i++) + { + Controller cc = ((GComponent)obj).GetController(buffer.ReadS()); + str = buffer.ReadS(); + if (cc != null) + cc.selectedPageId = str; + } + + if (buffer.version >= 2) + { + cnt = buffer.ReadShort(); + for (int i = 0; i < cnt; i++) + { + string target = buffer.ReadS(); + int propertyId = buffer.ReadShort(); + string value = buffer.ReadS(); + GObject obj2 = ((GComponent)obj).GetChildByPath(target); + if (obj2 != null) + { + if (propertyId == 0) + obj2.text = value; + else if (propertyId == 1) + obj2.icon = value; + } + } + } + } + } + + override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_AfterAdd(buffer, beginPos); + + buffer.Seek(beginPos, 6); + + int i = buffer.ReadShort(); + if (i != -1) + _selectionController = parent.GetControllerAt(i); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs.meta new file mode 100644 index 0000000..a7975a0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GList.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f5eda689519c51b42955139d2c6caba4 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs new file mode 100644 index 0000000..8adf74d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs @@ -0,0 +1,732 @@ +using System; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GLoader class + /// + public class GLoader : GObject, IAnimationGear, IColorGear + { + /// + /// Display an error sign if the loader fails to load the content. + /// UIConfig.loaderErrorSign muse be set. + /// + public bool showErrorSign; + + string _url; + AlignType _align; + VertAlignType _verticalAlign; + bool _autoSize; + FillType _fill; + bool _shrinkOnly; + bool _useResize; + bool _updatingLayout; + PackageItem _contentItem; + Action _reloadDelegate; + + MovieClip _content; + GObject _errorSign; + GComponent _content2; + +#if FAIRYGUI_PUERTS + public Action __loadExternal; + public Action __freeExternal; +#endif + + public GLoader() + { + _url = string.Empty; + _align = AlignType.Left; + _verticalAlign = VertAlignType.Top; + showErrorSign = true; + _reloadDelegate = OnExternalReload; + } + + override protected void CreateDisplayObject() + { + displayObject = new Container("GLoader"); + displayObject.gOwner = this; + _content = new MovieClip(); + ((Container)displayObject).AddChild(_content); + ((Container)displayObject).opaque = true; + } + + override public void Dispose() + { + if (_disposed) return; + + if (_content.texture != null) + { + if (_contentItem == null) + { + _content.texture.onSizeChanged -= _reloadDelegate; + try + { + FreeExternal(_content.texture); + } + catch (Exception err) + { + Debug.LogWarning(err); + } + } + } + if (_errorSign != null) + _errorSign.Dispose(); + if (_content2 != null) + _content2.Dispose(); + _content.Dispose(); + + base.Dispose(); + } + + /// + /// + /// + public string url + { + get { return _url; } + set + { + if (_url == value) + return; + + ClearContent(); + _url = value; + LoadContent(); + UpdateGear(7); + } + } + + override public string icon + { + get { return _url; } + set { this.url = value; } + } + + /// + /// + /// + public AlignType align + { + get { return _align; } + set + { + if (_align != value) + { + _align = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public VertAlignType verticalAlign + { + get { return _verticalAlign; } + set + { + if (_verticalAlign != value) + { + _verticalAlign = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public FillType fill + { + get { return _fill; } + set + { + if (_fill != value) + { + _fill = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public bool useResize + { + get { return _useResize; } + set + { + if (_useResize != value) + { + _useResize = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public bool shrinkOnly + { + get { return _shrinkOnly; } + set + { + if (_shrinkOnly != value) + { + _shrinkOnly = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public bool autoSize + { + get { return _autoSize; } + set + { + if (_autoSize != value) + { + _autoSize = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public bool playing + { + get { return _content.playing; } + set + { + _content.playing = value; + UpdateGear(5); + } + } + + /// + /// + /// + public int frame + { + get { return _content.frame; } + set + { + _content.frame = value; + UpdateGear(5); + } + } + + /// + /// + /// + public float timeScale + { + get { return _content.timeScale; } + set { _content.timeScale = value; } + } + + /// + /// + /// + public bool ignoreEngineTimeScale + { + get { return _content.ignoreEngineTimeScale; } + set { _content.ignoreEngineTimeScale = value; } + } + + /// + /// + /// + /// + public void Advance(float time) + { + _content.Advance(time); + } + + /// + /// + /// + public Material material + { + get { return _content.material; } + set { _content.material = value; } + } + + /// + /// + /// + public string shader + { + get { return _content.shader; } + set { _content.shader = value; } + } + + /// + /// + /// + public Color color + { + get { return _content.color; } + set + { + if (_content.color != value) + { + _content.color = value; + UpdateGear(4); + } + } + } + + /// + /// + /// + public FillMethod fillMethod + { + get { return _content.fillMethod; } + set { _content.fillMethod = value; } + } + + /// + /// + /// + public int fillOrigin + { + get { return _content.fillOrigin; } + set { _content.fillOrigin = value; } + } + + /// + /// + /// + public bool fillClockwise + { + get { return _content.fillClockwise; } + set { _content.fillClockwise = value; } + } + + /// + /// + /// + public float fillAmount + { + get { return _content.fillAmount; } + set { _content.fillAmount = value; } + } + + /// + /// + /// + public Image image + { + get { return _content; } + } + + /// + /// + /// + public MovieClip movieClip + { + get { return _content; } + } + + /// + /// + /// + public GComponent component + { + get { return _content2; } + } + + /// + /// + /// + public NTexture texture + { + get + { + return _content.texture; + } + + set + { + this.url = null; + + _content.texture = value; + if (value != null) + { + sourceWidth = value.width; + sourceHeight = value.height; + } + else + { + sourceWidth = sourceHeight = 0; + } + + UpdateLayout(); + } + } + + override public IFilter filter + { + get { return _content.filter; } + set { _content.filter = value; } + } + + override public BlendMode blendMode + { + get { return _content.blendMode; } + set { _content.blendMode = value; } + } + + /// + /// + /// + protected void LoadContent() + { + ClearContent(); + + if (string.IsNullOrEmpty(_url)) + return; + + if (_url.StartsWith(UIPackage.URL_PREFIX)) + LoadFromPackage(_url); + else + LoadExternal(); + } + + protected void LoadFromPackage(string itemURL) + { + _contentItem = UIPackage.GetItemByURL(itemURL); + + if (_contentItem != null) + { + _contentItem = _contentItem.getBranch(); + sourceWidth = _contentItem.width; + sourceHeight = _contentItem.height; + _contentItem = _contentItem.getHighResolution(); + _contentItem.Load(); + + if (_contentItem.type == PackageItemType.Image) + { + _content.texture = _contentItem.texture; + _content.textureScale = new Vector2(_contentItem.width / (float)sourceWidth, _contentItem.height / (float)sourceHeight); + _content.scale9Grid = _contentItem.scale9Grid; + _content.scaleByTile = _contentItem.scaleByTile; + _content.tileGridIndice = _contentItem.tileGridIndice; + + UpdateLayout(); + } + else if (_contentItem.type == PackageItemType.MovieClip) + { + _content.interval = _contentItem.interval; + _content.swing = _contentItem.swing; + _content.repeatDelay = _contentItem.repeatDelay; + _content.frames = _contentItem.frames; + + UpdateLayout(); + } + else if (_contentItem.type == PackageItemType.Component) + { + GObject obj = UIPackage.CreateObjectFromURL(itemURL); + if (obj == null) + SetErrorState(); + else if (!(obj is GComponent)) + { + obj.Dispose(); + SetErrorState(); + } + else + { + _content2 = (GComponent)obj; + ((Container)displayObject).AddChild(_content2.displayObject); + UpdateLayout(); + } + } + else + { + if (_autoSize) + this.SetSize(_contentItem.width, _contentItem.height); + + SetErrorState(); + + Debug.LogWarning("Unsupported type of GLoader: " + _contentItem.type); + } + } + else + SetErrorState(); + } + + virtual protected void LoadExternal() + { +#if FAIRYGUI_PUERTS + if (__loadExternal != null) + { + __loadExternal(); + return; + } +#endif + Texture2D tex = (Texture2D)Resources.Load(_url, typeof(Texture2D)); + if (tex != null) + onExternalLoadSuccess(new NTexture(tex)); + else + onExternalLoadFailed(); + } + + virtual protected void FreeExternal(NTexture texture) + { +#if FAIRYGUI_PUERTS + if (__freeExternal != null) + { + __freeExternal(texture); + return; + } +#endif + } + + public void onExternalLoadSuccess(NTexture texture) + { + _content.texture = texture; + sourceWidth = texture.width; + sourceHeight = texture.height; + _content.scale9Grid = null; + _content.scaleByTile = false; + texture.onSizeChanged += _reloadDelegate; + UpdateLayout(); + } + + public void onExternalLoadFailed() + { + SetErrorState(); + } + + void OnExternalReload(NTexture texture) + { + sourceWidth = texture.width; + sourceHeight = texture.height; + UpdateLayout(); + } + + private void SetErrorState() + { + if (!showErrorSign || !Application.isPlaying) + return; + + if (_errorSign == null) + { + if (UIConfig.loaderErrorSign != null) + _errorSign = UIPackage.CreateObjectFromURL(UIConfig.loaderErrorSign); + else + return; + } + + if (_errorSign != null) + { + _errorSign.SetSize(this.width, this.height); + ((Container)displayObject).AddChild(_errorSign.displayObject); + } + } + + protected void ClearErrorState() + { + if (_errorSign != null && _errorSign.displayObject.parent != null) + ((Container)displayObject).RemoveChild(_errorSign.displayObject); + } + + protected void UpdateLayout() + { + if (_content2 == null && _content.texture == null && _content.frames == null) + { + if (_autoSize) + { + _updatingLayout = true; + SetSize(50, 30); + _updatingLayout = false; + } + return; + } + + float contentWidth = sourceWidth; + float contentHeight = sourceHeight; + + if (_autoSize) + { + _updatingLayout = true; + if (contentWidth == 0) + contentWidth = 50; + if (contentHeight == 0) + contentHeight = 30; + SetSize(contentWidth, contentHeight); + + _updatingLayout = false; + + if (_width == contentWidth && _height == contentHeight) + { + if (_content2 != null) + { + _content2.SetXY(0, 0); + _content2.SetScale(1, 1); + if (_useResize) + _content2.SetSize(contentWidth, contentHeight, true); + } + else + { + _content.SetXY(0, 0); + _content.SetSize(contentWidth, contentHeight); + } + + InvalidateBatchingState(); + return; + } + //如果不相等,可能是由于大小限制造成的,要后续处理 + } + + float sx = 1, sy = 1; + if (_fill != FillType.None) + { + sx = this.width / sourceWidth; + sy = this.height / sourceHeight; + + if (sx != 1 || sy != 1) + { + if (_fill == FillType.ScaleMatchHeight) + sx = sy; + else if (_fill == FillType.ScaleMatchWidth) + sy = sx; + else if (_fill == FillType.Scale) + { + if (sx > sy) + sx = sy; + else + sy = sx; + } + else if (_fill == FillType.ScaleNoBorder) + { + if (sx > sy) + sy = sx; + else + sx = sy; + } + + if (_shrinkOnly) + { + if (sx > 1) + sx = 1; + if (sy > 1) + sy = 1; + } + + contentWidth = sourceWidth * sx; + contentHeight = sourceHeight * sy; + } + } + + if (_content2 != null) + { + if (_useResize) + { + _content2.SetScale(1, 1); + _content2.SetSize(contentWidth, contentHeight, true); + } + else + _content2.SetScale(sx, sy); + } + else + _content.size = new Vector2(contentWidth, contentHeight); + + float nx; + float ny; + if (_align == AlignType.Center) + nx = (this.width - contentWidth) / 2; + else if (_align == AlignType.Right) + nx = this.width - contentWidth; + else + nx = 0; + if (_verticalAlign == VertAlignType.Middle) + ny = (this.height - contentHeight) / 2; + else if (_verticalAlign == VertAlignType.Bottom) + ny = this.height - contentHeight; + else + ny = 0; + if (_content2 != null) + _content2.SetXY(nx, ny); + else + _content.SetXY(nx, ny); + + InvalidateBatchingState(); + } + + private void ClearContent() + { + ClearErrorState(); + + if (_content.texture != null) + { + if (_contentItem == null) + { + _content.texture.onSizeChanged -= _reloadDelegate; + FreeExternal(_content.texture); + } + _content.texture = null; + } + _content.frames = null; + + if (_content2 != null) + { + _content2.Dispose(); + _content2 = null; + } + _contentItem = null; + } + + override protected void HandleSizeChanged() + { + base.HandleSizeChanged(); + + if (!_updatingLayout) + UpdateLayout(); + } + + override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 5); + + _url = buffer.ReadS(); + _align = (AlignType)buffer.ReadByte(); + _verticalAlign = (VertAlignType)buffer.ReadByte(); + _fill = (FillType)buffer.ReadByte(); + _shrinkOnly = buffer.ReadBool(); + _autoSize = buffer.ReadBool(); + showErrorSign = buffer.ReadBool(); + _content.playing = buffer.ReadBool(); + _content.frame = buffer.ReadInt(); + + if (buffer.ReadBool()) + _content.color = buffer.ReadColor(); + _content.fillMethod = (FillMethod)buffer.ReadByte(); + if (_content.fillMethod != FillMethod.None) + { + _content.fillOrigin = buffer.ReadByte(); + _content.fillClockwise = buffer.ReadBool(); + _content.fillAmount = buffer.ReadFloat(); + } + if (buffer.version >= 7) + _useResize = buffer.ReadBool(); + + if (!string.IsNullOrEmpty(_url)) + LoadContent(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs.meta new file mode 100644 index 0000000..d53397e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 43ce591d02b49e8419c431df4af3da0b +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs new file mode 100644 index 0000000..a9a092d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs @@ -0,0 +1,567 @@ +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public partial class GLoader3D : GObject, IAnimationGear, IColorGear + { + string _url; + AlignType _align; + VertAlignType _verticalAlign; + bool _autoSize; + FillType _fill; + bool _shrinkOnly; + string _animationName; + string _skinName; + bool _playing; + int _frame; + bool _loop; + bool _updatingLayout; + Color _color; + + protected PackageItem _contentItem; + protected GoWrapper _content; + + public GLoader3D() + { + _url = string.Empty; + _align = AlignType.Left; + _verticalAlign = VertAlignType.Top; + _playing = true; + _color = Color.white; + } + + override protected void CreateDisplayObject() + { + displayObject = new Container("GLoader3D"); + displayObject.gOwner = this; + + _content = new GoWrapper(); + _content.onUpdate += OnUpdateContent; + ((Container)displayObject).AddChild(_content); + ((Container)displayObject).opaque = true; + } + + override public void Dispose() + { + _content.Dispose(); + base.Dispose(); + } + + /// + /// + /// + public string url + { + get { return _url; } + set + { + if (_url == value) + return; + + ClearContent(); + _url = value; + LoadContent(); + UpdateGear(7); + } + } + + override public string icon + { + get { return _url; } + set { this.url = value; } + } + + /// + /// + /// + public AlignType align + { + get { return _align; } + set + { + if (_align != value) + { + _align = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public VertAlignType verticalAlign + { + get { return _verticalAlign; } + set + { + if (_verticalAlign != value) + { + _verticalAlign = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public FillType fill + { + get { return _fill; } + set + { + if (_fill != value) + { + _fill = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public bool shrinkOnly + { + get { return _shrinkOnly; } + set + { + if (_shrinkOnly != value) + { + _shrinkOnly = value; + UpdateLayout(); + } + } + } + + /// + /// + /// + public bool autoSize + { + get { return _autoSize; } + set + { + if (_autoSize != value) + { + _autoSize = value; + UpdateLayout(); + } + } + } + + public bool playing + { + get { return _playing; } + set + { + if (_playing != value) + { + _playing = value; + OnChange("playing"); + UpdateGear(5); + } + } + } + + public int frame + { + get { return _frame; } + set + { + + if (_frame != value) + { + _frame = value; + OnChange("frame"); + UpdateGear(5); + } + } + } + + /// + /// Not implemented + /// + public float timeScale + { + get; + set; + } + + /// + /// Not implemented + /// + public bool ignoreEngineTimeScale + { + get; + set; + } + + /// + /// Not implemented + /// + /// + public void Advance(float time) + { + } + + /// + /// + /// + public bool loop + { + get { return _loop; } + set + { + if (_loop != value) + { + _loop = value; + OnChange("loop"); + } + } + } + + /// + /// + /// + /// + public string animationName + { + get { return _animationName; } + set + { + _animationName = value; + OnChange("animationName"); + UpdateGear(5); + } + } + + /// + /// + /// + /// + public string skinName + { + get { return _skinName; } + set + { + _skinName = value; + OnChange("skinName"); + UpdateGear(5); + } + } + + /// + /// + /// + public Material material + { + get { return _content.material; } + set { _content.material = value; } + } + + /// + /// + /// + public string shader + { + get { return _content.shader; } + set { _content.shader = value; } + } + + /// + /// + /// + public Color color + { + get { return _color; } + set + { + if (_color != value) + { + _color = value; + UpdateGear(4); + + OnChange("color"); + } + } + } + + /// + /// + /// + public GameObject wrapTarget + { + get { return _content.wrapTarget; } + } + + /// + /// + /// + /// + /// + /// + /// + public void SetWrapTarget(GameObject gameObject, bool cloneMaterial, int width, int height) + { + _content.SetWrapTarget(gameObject, cloneMaterial); + _content.SetSize(width, height); + sourceWidth = width; + sourceHeight = height; + + UpdateLayout(); + } + + override public IFilter filter + { + get { return _content.filter; } + set { _content.filter = value; } + } + + override public BlendMode blendMode + { + get { return _content.blendMode; } + set { _content.blendMode = value; } + } + + /// + /// + /// + protected void LoadContent() + { + ClearContent(); + + if (string.IsNullOrEmpty(_url)) + return; + + _contentItem = UIPackage.GetItemByURL(_url); + + if (_contentItem != null) + { + _contentItem.skeletonLoaders.Add(this); + _contentItem = _contentItem.getBranch(); + _contentItem = _contentItem.getHighResolution(); + _contentItem.Load(); + + if (_contentItem.type == PackageItemType.Spine) + { +#if FAIRYGUI_SPINE + LoadSpine(); +#endif + } + else if (_contentItem.type == PackageItemType.DragoneBones) + { +#if FAIRYGUI_DRAGONBONES + LoadDragonBones(); +#endif + } + } + else + LoadExternal(); + } + + virtual protected void OnChange(string propertyName) + { + if (_contentItem == null) + return; + + + if (_contentItem.type == PackageItemType.Spine) + { +#if FAIRYGUI_SPINE + OnChangeSpine(propertyName); +#endif + } + else if (_contentItem.type == PackageItemType.DragoneBones) + { +#if FAIRYGUI_DRAGONBONES + OnChangeDragonBones(propertyName); +#endif + } + } + + virtual protected void LoadExternal() + { + } + + virtual protected void FreeExternal() + { + GameObject.DestroyImmediate(_content.wrapTarget); + } + + protected void UpdateLayout() + { + if (sourceWidth == 0 || sourceHeight == 0) + return; + + float contentWidth = sourceWidth; + float contentHeight = sourceHeight; + + if (_autoSize) + { + _updatingLayout = true; + if (contentWidth == 0) + contentWidth = 50; + if (contentHeight == 0) + contentHeight = 30; + SetSize(contentWidth, contentHeight); + + _updatingLayout = false; + + if (_width == contentWidth && _height == contentHeight) + { + _content.SetXY(0, 0); + _content.SetScale(1, 1); + + InvalidateBatchingState(); + return; + } + //如果不相等,可能是由于大小限制造成的,要后续处理 + } + + float sx = 1, sy = 1; + if (_fill != FillType.None) + { + sx = this.width / sourceWidth; + sy = this.height / sourceHeight; + + if (sx != 1 || sy != 1) + { + if (_fill == FillType.ScaleMatchHeight) + sx = sy; + else if (_fill == FillType.ScaleMatchWidth) + sy = sx; + else if (_fill == FillType.Scale) + { + if (sx > sy) + sx = sy; + else + sy = sx; + } + else if (_fill == FillType.ScaleNoBorder) + { + if (sx > sy) + sy = sx; + else + sx = sy; + } + + if (_shrinkOnly) + { + if (sx > 1) + sx = 1; + if (sy > 1) + sy = 1; + } + + contentWidth = sourceWidth * sx; + contentHeight = sourceHeight * sy; + } + } + + _content.SetScale(sx, sy); + + float nx; + float ny; + if (_align == AlignType.Center) + nx = (this.width - contentWidth) / 2; + else if (_align == AlignType.Right) + nx = this.width - contentWidth; + else + nx = 0; + if (_verticalAlign == VertAlignType.Middle) + ny = (this.height - contentHeight) / 2; + else if (_verticalAlign == VertAlignType.Bottom) + ny = this.height - contentHeight; + else + ny = 0; + _content.SetXY(nx, ny); + + InvalidateBatchingState(); + } + + protected void ClearContent() + { + if (_content.wrapTarget != null) + { + if (_contentItem != null) + { + if (_contentItem.type == PackageItemType.Spine) + { +#if FAIRYGUI_SPINE + FreeSpine(); +#endif + } + else if (_contentItem.type == PackageItemType.DragoneBones) + { +#if FAIRYGUI_DRAGONBONES + FreeDragonBones(); +#endif + } + } + else + FreeExternal(); + } + _content.wrapTarget = null; + _contentItem = null; + } + + protected void OnUpdateContent(UpdateContext context) + { + if (_contentItem == null) + return; + + + if (_contentItem.type == PackageItemType.Spine) + { +#if FAIRYGUI_SPINE + OnUpdateSpine(context); +#endif + } + else if (_contentItem.type == PackageItemType.DragoneBones) + { +#if FAIRYGUI_DRAGONBONES + OnUpdateDragonBones(context); +#endif + } + } + + override protected void HandleSizeChanged() + { + base.HandleSizeChanged(); + + if (!_updatingLayout) + UpdateLayout(); + } + + override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 5); + + _url = buffer.ReadS(); + _align = (AlignType)buffer.ReadByte(); + _verticalAlign = (VertAlignType)buffer.ReadByte(); + _fill = (FillType)buffer.ReadByte(); + _shrinkOnly = buffer.ReadBool(); + _autoSize = buffer.ReadBool(); + _animationName = buffer.ReadS(); + _skinName = buffer.ReadS(); + _playing = buffer.ReadBool(); + _frame = buffer.ReadInt(); + _loop = buffer.ReadBool(); + + if (buffer.ReadBool()) + this.color = buffer.ReadColor(); //color + + if (!string.IsNullOrEmpty(_url)) + LoadContent(); + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs.meta new file mode 100644 index 0000000..84920c8 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GLoader3D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 808355b0b55f945779f2a21d3d69cbfb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs new file mode 100644 index 0000000..1697a93 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs @@ -0,0 +1,190 @@ +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GMovieClip class. + /// + public class GMovieClip : GObject, IAnimationGear, IColorGear + { + MovieClip _content; + EventListener _onPlayEnd; + + public GMovieClip() + { + } + + override protected void CreateDisplayObject() + { + _content = new MovieClip(); + _content.gOwner = this; + _content.ignoreEngineTimeScale = true; + displayObject = _content; + } + + /// + /// + /// + public EventListener onPlayEnd + { + get { return _onPlayEnd ?? (_onPlayEnd = new EventListener(this, "onPlayEnd")); } + } + + /// + /// + /// + public bool playing + { + get { return _content.playing; } + set + { + _content.playing = value; + UpdateGear(5); + } + } + + /// + /// + /// + public int frame + { + get { return _content.frame; } + set + { + _content.frame = value; + UpdateGear(5); + } + } + + /// + /// + /// + public Color color + { + get { return _content.color; } + set + { + _content.color = value; + UpdateGear(4); + } + } + + /// + /// + /// + public FlipType flip + { + get { return _content.graphics.flip; } + set { _content.graphics.flip = value; } + } + + /// + /// + /// + public Material material + { + get { return _content.material; } + set { _content.material = value; } + } + + /// + /// + /// + public string shader + { + get { return _content.shader; } + set { _content.shader = value; } + } + + /// + /// + /// + public float timeScale + { + get { return _content.timeScale; } + set { _content.timeScale = value; } + } + + /// + /// + /// + public bool ignoreEngineTimeScale + { + get { return _content.ignoreEngineTimeScale; } + set { _content.ignoreEngineTimeScale = value; } + } + + /// + /// + /// + public void Rewind() + { + _content.Rewind(); + } + + /// + /// + /// + /// + public void SyncStatus(GMovieClip anotherMc) + { + _content.SyncStatus(anotherMc._content); + } + + /// + /// + /// + /// + public void Advance(float time) + { + _content.Advance(time); + } + + /// + /// Play from the start to end, repeat times, set to endAt on complete. + /// 从start帧开始,播放到end帧(-1表示结尾),重复times次(0表示无限循环),循环结束后,停止在endAt帧(-1表示参数end) + /// + /// Start frame + /// End frame. -1 indicates the last frame. + /// Repeat times. 0 indicates infinite loop. + /// Stop frame. -1 indicates to equal to the end parameter. + public void SetPlaySettings(int start, int end, int times, int endAt) + { + ((MovieClip)displayObject).SetPlaySettings(start, end, times, endAt); + } + + override public void ConstructFromResource() + { + this.gameObjectName = packageItem.name; + + PackageItem contentItem = packageItem.getBranch(); + sourceWidth = contentItem.width; + sourceHeight = contentItem.height; + initWidth = sourceWidth; + initHeight = sourceHeight; + contentItem = contentItem.getHighResolution(); + contentItem.Load(); + + _content.interval = contentItem.interval; + _content.swing = contentItem.swing; + _content.repeatDelay = contentItem.repeatDelay; + _content.frames = contentItem.frames; + + SetSize(sourceWidth, sourceHeight); + } + + override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 5); + + if (buffer.ReadBool()) + _content.color = buffer.ReadColor(); + _content.graphics.flip = (FlipType)buffer.ReadByte(); + _content.frame = buffer.ReadInt(); + _content.playing = buffer.ReadBool(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs.meta new file mode 100644 index 0000000..43a15a2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GMovieClip.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 158e4b32fb035414091844233b2b9269 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs new file mode 100644 index 0000000..288a852 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs @@ -0,0 +1,2187 @@ +using System; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + public class GObject : EventDispatcher + { + /// + /// GObject的id,仅作为内部使用。与name不同,id值是不会相同的。 + /// id is for internal use only. + /// + public string id { get; private set; } + + /// + /// Name of the object. + /// + public string name; + + /// + /// User defined data. + /// + public object data; + + /// + /// The source width of the object. + /// + public int sourceWidth; + + /// + /// The source height of the object. + /// + public int sourceHeight; + + /// + /// The initial width of the object. + /// + public int initWidth; + + /// + /// The initial height of the object. + /// + public int initHeight; + + /// + /// + /// + public int minWidth; + + /// + /// + /// + public int maxWidth; + + /// + /// + /// + public int minHeight; + + /// + /// + /// + public int maxHeight; + + /// + /// Relations Object. + /// + public Relations relations { get; private set; } + + /// + /// Restricted range of dragging. + /// + public Rect? dragBounds; + + /// + /// Parent object. + /// + public GComponent parent { get; private set; } + + /// + /// Lowlevel display object. + /// + public DisplayObject displayObject { get; protected set; } + + /// + /// 当前全局正在被拖动的对象 + /// + public static GObject draggingObject { get; private set; } + + /// + /// + /// + public PackageItem packageItem; + + float _x; + float _y; + float _z; + float _pivotX; + float _pivotY; + bool _pivotAsAnchor; + float _alpha; + float _rotation; + float _rotationX; + float _rotationY; + bool _visible; + bool _internalVisible; + bool _handlingController; + bool _touchable; + bool _grayed; + bool _draggable; + float _scaleX; + float _scaleY; + int _sortingOrder; + string _tooltips; + GGroup _group; + + GearBase[] _gears; + + EventListener _onClick; + EventListener _onRightClick; + EventListener _onTouchBegin; + EventListener _onTouchMove; + EventListener _onTouchEnd; + EventListener _onRollOver; + EventListener _onRollOut; + EventListener _onAddedToStage; + EventListener _onRemovedFromStage; + EventListener _onKeyDown; + EventListener _onClickLink; + EventListener _onPositionChanged; + EventListener _onSizeChanged; + EventListener _onDragStart; + EventListener _onDragMove; + EventListener _onDragEnd; + EventListener _onGearStop; + EventListener _onFocusIn; + EventListener _onFocusOut; + + internal protected bool underConstruct; + internal float _width; + internal float _height; + internal float _rawWidth; + internal float _rawHeight; + internal bool _gearLocked; + internal float _sizePercentInGroup; + internal bool _disposed; + internal GTreeNode _treeNode; + + internal static uint _gInstanceCounter; + + public GObject() + { + _width = 0; + _height = 0; + _alpha = 1; + _visible = true; + _touchable = true; + _scaleX = 1; + _scaleY = 1; + _internalVisible = true; + id = "_n" + _gInstanceCounter++; + name = string.Empty; + + CreateDisplayObject(); + + relations = new Relations(this); + _gears = new GearBase[10]; + } + + /// + /// Dispatched when the object or its child was clicked. + /// + public EventListener onClick + { + get { return _onClick ?? (_onClick = new EventListener(this, "onClick")); } + } + + /// + /// Dispatched when the object or its child was clicked by right mouse button. Web only. + /// + public EventListener onRightClick + { + get { return _onRightClick ?? (_onRightClick = new EventListener(this, "onRightClick")); } + } + + /// + /// Dispatched when the finger touched the object or its child just now. + /// + public EventListener onTouchBegin + { + get { return _onTouchBegin ?? (_onTouchBegin = new EventListener(this, "onTouchBegin")); } + } + + /// + /// + /// + public EventListener onTouchMove + { + get { return _onTouchMove ?? (_onTouchMove = new EventListener(this, "onTouchMove")); } + } + + /// + /// Dispatched when the finger was lifted from the screen or from the mouse button. + /// + public EventListener onTouchEnd + { + get { return _onTouchEnd ?? (_onTouchEnd = new EventListener(this, "onTouchEnd")); } + } + + /// + /// The cursor or finger hovers over an object. + /// + public EventListener onRollOver + { + get { return _onRollOver ?? (_onRollOver = new EventListener(this, "onRollOver")); } + } + + /// + /// The cursor or finger leave an object. + /// + public EventListener onRollOut + { + get { return _onRollOut ?? (_onRollOut = new EventListener(this, "onRollOut")); } + } + + /// + /// Dispatched when the object was added to the stage. + /// + public EventListener onAddedToStage + { + get { return _onAddedToStage ?? (_onAddedToStage = new EventListener(this, "onAddedToStage")); } + } + + /// + /// Dispatched when the object was removed from the stage. + /// + public EventListener onRemovedFromStage + { + get { return _onRemovedFromStage ?? (_onRemovedFromStage = new EventListener(this, "onRemovedFromStage")); } + } + + /// + /// Dispatched on key pressed when the object is in focus. + /// + public EventListener onKeyDown + { + get { return _onKeyDown ?? (_onKeyDown = new EventListener(this, "onKeyDown")); } + } + + /// + /// Dispatched when links in the object or its child was clicked. + /// + public EventListener onClickLink + { + get { return _onClickLink ?? (_onClickLink = new EventListener(this, "onClickLink")); } + } + + /// + /// Dispatched when the object was moved. + /// + public EventListener onPositionChanged + { + get { return _onPositionChanged ?? (_onPositionChanged = new EventListener(this, "onPositionChanged")); } + } + + /// + /// Dispatched when the object was resized. + /// + public EventListener onSizeChanged + { + get { return _onSizeChanged ?? (_onSizeChanged = new EventListener(this, "onSizeChanged")); } + } + + /// + /// Dispatched when drag start. + /// + public EventListener onDragStart + { + get { return _onDragStart ?? (_onDragStart = new EventListener(this, "onDragStart")); } + } + + /// + /// Dispatched when dragging. + /// + public EventListener onDragMove + { + get { return _onDragMove ?? (_onDragMove = new EventListener(this, "onDragMove")); } + } + + /// + /// Dispatched when drag end. + /// + public EventListener onDragEnd + { + get { return _onDragEnd ?? (_onDragEnd = new EventListener(this, "onDragEnd")); } + } + + /// + /// + /// + public EventListener onGearStop + { + get { return _onGearStop ?? (_onGearStop = new EventListener(this, "onGearStop")); } + } + + /// + /// + /// + public EventListener onFocusIn + { + get { return _onFocusIn ?? (_onFocusIn = new EventListener(this, "onFocusIn")); } + } + + /// + /// + /// + public EventListener onFocusOut + { + get { return _onFocusOut ?? (_onFocusOut = new EventListener(this, "onFocusOut")); } + } + + /// + /// The x coordinate of the object relative to the local coordinates of the parent. + /// + public float x + { + get { return _x; } + set + { + SetPosition(value, _y, _z); + } + } + + /// + /// The y coordinate of the object relative to the local coordinates of the parent. + /// + public float y + { + get { return _y; } + set + { + SetPosition(_x, value, _z); + } + } + + /// + /// The z coordinate of the object relative to the local coordinates of the parent. + /// + public float z + { + get { return _z; } + set + { + SetPosition(_x, _y, value); + } + } + + /// + /// The x and y coordinates of the object relative to the local coordinates of the parent. + /// + public Vector2 xy + { + get { return new Vector2(_x, _y); } + set { SetPosition(value.x, value.y, _z); } + } + + /// + /// The x,y,z coordinates of the object relative to the local coordinates of the parent. + /// + public Vector3 position + { + get { return new Vector3(_x, _y, _z); } + set { SetPosition(value.x, value.y, value.z); } + } + + /// + /// change the x and y coordinates of the object relative to the local coordinates of the parent. + /// + /// x value. + /// y value. + public void SetXY(float xv, float yv) + { + SetPosition(xv, yv, _z); + } + + /// + /// + /// + /// + /// + /// + public void SetXY(float xv, float yv, bool topLeftValue) + { + if (_pivotAsAnchor) + SetPosition(xv + _pivotX * _width, yv + _pivotY * _height, _z); + else + SetPosition(xv, yv, _z); + } + + /// + /// change the x,y,z coordinates of the object relative to the local coordinates of the parent. + /// + /// x value. + /// y value. + /// z value. + public void SetPosition(float xv, float yv, float zv) + { + if (_x != xv || _y != yv || _z != zv) + { + float dx = xv - _x; + float dy = yv - _y; + _x = xv; + _y = yv; + _z = zv; + + HandlePositionChanged(); + + if (this is GGroup) + ((GGroup)this).MoveChildren(dx, dy); + + UpdateGear(1); + + if (parent != null && !(parent is GList)) + { + parent.SetBoundsChangedFlag(); + if (_group != null) + _group.SetBoundsChangedFlag(true); + DispatchEvent("onPositionChanged", null); + } + + if (draggingObject == this && !sUpdateInDragging) + sGlobalRect = this.LocalToGlobal(new Rect(0, 0, this.width, this.height)); + } + } + + [Obsolete("Use UIConfig.makePixelPerfect or DisplayObject.pixelPerfect")] + public bool pixelSnapping + { + get { return false; } + set { } + } + + /// + /// Set the object in middle of the parent or GRoot if the parent is not set. + /// + public void Center() + { + Center(false); + } + + /// + /// Set the object in middle of the parent or GRoot if the parent is not set. + /// + /// Add relations to maintain the center state. + public virtual void Center(bool restraint) + { + GComponent r; + if (parent != null) + r = parent; + else + r = this.root; + + this.SetXY((int)((r.width - this.width) / 2), (int)((r.height - this.height) / 2), true); + if (restraint) + { + this.AddRelation(r, RelationType.Center_Center); + this.AddRelation(r, RelationType.Middle_Middle); + } + } + + /// + /// 设置对象为全屏大小(逻辑屏幕)。 + /// + public void MakeFullScreen() + { + this.SetSize(GRoot.inst.width, GRoot.inst.height); + } + + /// + /// The width of the object in pixels. + /// + public float width + { + get + { + return _width; + } + set + { + SetSize(value, _rawHeight); + } + } + + /// + /// The height of the object in pixels. + /// + public float height + { + get + { + return _height; + } + set + { + SetSize(_rawWidth, value); + } + } + + /// + /// The size of the object in pixels. + /// + public Vector2 size + { + get { return new Vector2(width, height); } + set { SetSize(value.x, value.y); } + } + + /// + /// actualWidth = width * scalex + /// + public float actualWidth + { + get { return this.width * _scaleX; } + } + + /// + /// actualHeight = height * scaleY + /// + public float actualHeight + { + get { return this.height * _scaleY; } + } + + /// + /// Change size. + /// + /// Width value. + /// Height value. + public void SetSize(float wv, float hv) + { + SetSize(wv, hv, false); + } + + /// + /// Change size. + /// + /// Width value. + /// Height value. + /// If pivot is set, the object's positon will change when its size change. Set ignorePivot=true to keep the position. + public void SetSize(float wv, float hv, bool ignorePivot) + { + if (_rawWidth != wv || _rawHeight != hv) + { + _rawWidth = wv; + _rawHeight = hv; + if (wv < minWidth) + wv = minWidth; + else if (maxWidth > 0 && wv > maxWidth) + wv = maxWidth; + if (hv < minHeight) + hv = minHeight; + else if (maxHeight > 0 && hv > maxHeight) + hv = maxHeight; + float dWidth = wv - _width; + float dHeight = hv - _height; + _width = wv; + _height = hv; + + HandleSizeChanged(); + + if (_pivotX != 0 || _pivotY != 0) + { + if (!_pivotAsAnchor) + { + if (!ignorePivot) + SetXY(_x - _pivotX * dWidth, _y - _pivotY * dHeight); + else + HandlePositionChanged(); + } + else + HandlePositionChanged(); + } + + if (this is GGroup) + ((GGroup)this).ResizeChildren(dWidth, dHeight); + + UpdateGear(2); + + if (parent != null) + { + relations.OnOwnerSizeChanged(dWidth, dHeight, _pivotAsAnchor || !ignorePivot); + parent.SetBoundsChangedFlag(); + if (_group != null) + _group.SetBoundsChangedFlag(); + } + + DispatchEvent("onSizeChanged", null); + } + } + + protected void SetSizeDirectly(float wv, float hv) + { + _rawWidth = wv; + _rawHeight = hv; + if (wv < 0) + wv = 0; + if (hv < 0) + hv = 0; + _width = wv; + _height = hv; + } + + /// + /// + /// + public float xMin + { + get + { + return _pivotAsAnchor ? (_x - _width * _pivotX) : _x; + } + set + { + if (_pivotAsAnchor) + SetPosition(value + _width * _pivotX, _y, _z); + else + SetPosition(value, _y, _z); + } + } + + /// + /// + /// + public float yMin + { + get + { + return _pivotAsAnchor ? (_y - _height * _pivotY) : _y; + } + set + { + if (_pivotAsAnchor) + SetPosition(_x, value + _height * _pivotY, _z); + else + SetPosition(_x, value, _z); + } + } + + /// + /// The horizontal scale factor. '1' means no scale, cannt be negative. + /// + public float scaleX + { + get { return _scaleX; } + set + { + SetScale(value, _scaleY); + } + } + + /// + /// The vertical scale factor. '1' means no scale, cannt be negative. + /// + public float scaleY + { + get { return _scaleY; } + set + { + SetScale(_scaleX, value); + } + } + + /// + /// The scale factor. + /// + public Vector2 scale + { + get { return new Vector2(_scaleX, _scaleY); } + set { SetScale(value.x, value.y); } + } + + /// + /// Change the scale factor. + /// + /// The horizontal scale factor. + /// The vertical scale factor + public void SetScale(float wv, float hv) + { + if (_scaleX != wv || _scaleY != hv) + { + _scaleX = wv; + _scaleY = hv; + HandleScaleChanged(); + + UpdateGear(2); + } + } + + /// + /// + /// + public Vector2 skew + { + get + { + if (displayObject != null) + return displayObject.skew; + else + return Vector2.zero; + } + + set + { + if (displayObject != null) + displayObject.skew = value; + } + } + + /// + /// The x coordinate of the object's origin in its own coordinate space. + /// + public float pivotX + { + get { return _pivotX; } + set + { + SetPivot(value, _pivotY, _pivotAsAnchor); + } + } + + /// + /// The y coordinate of the object's origin in its own coordinate space. + /// + public float pivotY + { + get { return _pivotY; } + set + { + SetPivot(_pivotX, value, _pivotAsAnchor); + } + } + + /// + /// The x and y coordinates of the object's origin in its own coordinate space. + /// + public Vector2 pivot + { + get { return new Vector2(_pivotX, _pivotY); } + set { SetPivot(value.x, value.y, _pivotAsAnchor); } + } + + public bool pivotAsAnchor + { + get { return _pivotAsAnchor; } + set + { + SetPivot(_pivotX, _pivotY, value); + } + } + + /// + /// Change the x and y coordinates of the object's origin in its own coordinate space. + /// + /// x value in ratio + /// y value in ratio + public void SetPivot(float xv, float yv) + { + SetPivot(xv, yv, false); + } + + /// + /// Change the x and y coordinates of the object's origin in its own coordinate space. + /// + /// x value in ratio + /// y value in ratio + /// If use the pivot as the anchor position + public void SetPivot(float xv, float yv, bool asAnchor) + { + if (_pivotX != xv || _pivotY != yv || _pivotAsAnchor != asAnchor) + { + _pivotX = xv; + _pivotY = yv; + _pivotAsAnchor = asAnchor; + if (displayObject != null) + displayObject.pivot = new Vector2(_pivotX, _pivotY); + HandlePositionChanged(); + } + } + + /// + /// If the object can touch or click. GImage/GTextField is not touchable even it is true. + /// + public bool touchable + { + get + { + return _touchable; + } + set + { + if (_touchable != value) + { + _touchable = value; + UpdateGear(3); + + if (displayObject != null) + displayObject.touchable = _touchable; + } + } + } + + /// + /// If true, apply a grayed effect on this object. + /// + public bool grayed + { + get + { + return _grayed; + } + set + { + if (_grayed != value) + { + _grayed = value; + HandleGrayedChanged(); + UpdateGear(3); + } + } + } + + /// + /// Enabled is shortcut for grayed and !touchable combination. + /// + public bool enabled + { + get + { + return !_grayed && _touchable; + } + set + { + this.grayed = !value; + this.touchable = value; + } + } + + /// + /// The rotation around the z axis of the object in degrees. + /// + public float rotation + { + get + { + return _rotation; + } + set + { + _rotation = value; + if (displayObject != null) + displayObject.rotation = _rotation; + UpdateGear(3); + } + } + + /// + /// The rotation around the x axis of the object in degrees. + /// + public float rotationX + { + get + { + return _rotationX; + } + set + { + _rotationX = value; + if (displayObject != null) + displayObject.rotationX = _rotationX; + } + } + + /// + /// The rotation around the y axis of the object in degrees. + /// + public float rotationY + { + get + { + return _rotationY; + } + set + { + _rotationY = value; + if (displayObject != null) + displayObject.rotationY = _rotationY; + } + } + + /// + /// The opacity of the object. 0 = transparent, 1 = opaque. + /// + public float alpha + { + + get + { + return _alpha; + } + + set + { + _alpha = value; + HandleAlphaChanged(); + UpdateGear(3); + } + } + + /// + /// The visibility of the object. An invisible object will be untouchable. + /// + public bool visible + { + get + { + return _visible; + } + + set + { + if (_visible != value) + { + _visible = value; + HandleVisibleChanged(); + if (parent != null) + parent.SetBoundsChangedFlag(); + if (_group != null && _group.excludeInvisibles) + _group.SetBoundsChangedFlag(); + } + } + } + + internal bool internalVisible + { + get + { + return _internalVisible && (group == null || group.internalVisible); + } + } + + internal bool internalVisible2 + { + get + { + return _visible && (group == null || group.internalVisible2); + } + } + + internal bool internalVisible3 + { + get + { + return _visible && _internalVisible; + } + } + + /// + /// By default(when sortingOrder==0), object added to component is arrange by the added roder. + /// The bigger is the sorting order, the object is more in front. + /// + public int sortingOrder + { + get { return _sortingOrder; } + set + { + if (value < 0) + value = 0; + if (_sortingOrder != value) + { + int old = _sortingOrder; + _sortingOrder = value; + if (parent != null) + parent.ChildSortingOrderChanged(this, old, _sortingOrder); + } + } + } + + /// + /// If the object can be focused? + /// + public bool focusable + { + get { return displayObject != null && displayObject.focusable; } + set { if (displayObject != null) displayObject.focusable = value; } + } + + /// + /// If the object can be navigated by TAB? + /// + public bool tabStop + { + get { return displayObject != null && displayObject.tabStop; } + set { if (displayObject != null) displayObject.tabStop = value; } + } + + /// + /// If the object is focused. + /// + public bool focused + { + get { return displayObject != null && displayObject.focused; } + } + + /// + /// Request focus on this object. + /// + public void RequestFocus() + { + if (displayObject != null) + Stage.inst.SetFocus(displayObject, false); + } + + /// + /// Request focus on this object. + /// + public void RequestFocus(bool byKey) + { + if (displayObject != null) + Stage.inst.SetFocus(displayObject, byKey); + } + + /// + /// Tooltips of this object. UIConfig.tooltipsWin must be set first. + /// + public string tooltips + { + get { return _tooltips; } + set + { + if (!string.IsNullOrEmpty(_tooltips)) + { + this.onRollOver.Remove(__rollOver); + this.onRollOut.Remove(__rollOut); + } + + _tooltips = value; + if (!string.IsNullOrEmpty(_tooltips)) + { + this.onRollOver.Add(__rollOver); + this.onRollOut.Add(__rollOut); + } + } + } + + + /// + /// + /// + /// + public string cursor + { + get { return displayObject != null ? displayObject.cursor : null; } + set + { + if (displayObject != null) + displayObject.cursor = value; + } + } + + private void __rollOver() + { + this.root.ShowTooltips(tooltips); + } + + private void __rollOut() + { + this.root.HideTooltips(); + } + + /// + /// + /// + virtual public IFilter filter + { + get { return displayObject != null ? displayObject.filter : null; } + set { if (displayObject != null) displayObject.filter = value; } + } + + /// + /// + /// + virtual public BlendMode blendMode + { + get { return displayObject != null ? displayObject.blendMode : BlendMode.None; } + set { if (displayObject != null) displayObject.blendMode = value; } + } + + /// + /// 设定GameObject的名称 + /// + public string gameObjectName + { + get + { + if (displayObject != null) + return displayObject.gameObject.name; + else + return null; + } + + set + { + if (displayObject != null) + displayObject.gameObject.name = value; + } + } + + /// + /// + /// + /// + public void SetHome(GObject obj) + { + if (obj != null && displayObject != null && obj.displayObject != null) + displayObject.home = obj.displayObject.cachedTransform; + } + + /// + /// If the object has lowlevel displayobject and the displayobject has a container parent? + /// + public bool inContainer + { + get + { + return displayObject != null && displayObject.parent != null; + } + } + + /// + /// If the object is on stage. + /// + public bool onStage + { + get + { + return displayObject != null && displayObject.stage != null; + } + } + + /// + /// Resource url of this object. + /// + public string resourceURL + { + get + { + if (packageItem != null) + return UIPackage.URL_PREFIX + packageItem.owner.id + packageItem.id; + else + return null; + } + } + + /// + /// Gear to xy controller. + /// + public GearXY gearXY + { + get + { + return (GearXY)GetGear(1); + } + } + + /// + /// Gear to size controller. + /// + public GearSize gearSize + { + get + { + return (GearSize)GetGear(2); + } + } + + /// + /// Gear to look controller. + /// + public GearLook gearLook + { + get + { + return (GearLook)GetGear(3); + } + } + + public GearBase GetGear(int index) + { + GearBase gear = _gears[index]; + if (gear == null) + { + switch (index) + { + case 0: + gear = new GearDisplay(this); + break; + case 1: + gear = new GearXY(this); + break; + case 2: + gear = new GearSize(this); + break; + case 3: + gear = new GearLook(this); + break; + case 4: + gear = new GearColor(this); + break; + case 5: + gear = new GearAnimation(this); + break; + case 6: + gear = new GearText(this); + break; + case 7: + gear = new GearIcon(this); + break; + case 8: + gear = new GearDisplay2(this); + break; + case 9: + gear = new GearFontSize(this); + break; + default: + throw new System.Exception("FairyGUI: invalid gear index!"); + } + _gears[index] = gear; + } + return gear; + } + + protected void UpdateGear(int index) + { + if (underConstruct || _gearLocked) + return; + + GearBase gear = _gears[index]; + if (gear != null && gear.controller != null) + gear.UpdateState(); + } + + internal bool CheckGearController(int index, Controller c) + { + return _gears[index] != null && _gears[index].controller == c; + } + + internal void UpdateGearFromRelations(int index, float dx, float dy) + { + if (_gears[index] != null) + _gears[index].UpdateFromRelations(dx, dy); + } + + internal uint AddDisplayLock() + { + GearDisplay gearDisplay = (GearDisplay)_gears[0]; + if (gearDisplay != null && gearDisplay.controller != null) + { + uint ret = gearDisplay.AddLock(); + CheckGearDisplay(); + + return ret; + } + else + return 0; + } + + internal void ReleaseDisplayLock(uint token) + { + GearDisplay gearDisplay = (GearDisplay)_gears[0]; + if (gearDisplay != null && gearDisplay.controller != null) + { + gearDisplay.ReleaseLock(token); + CheckGearDisplay(); + } + } + + void CheckGearDisplay() + { + if (_handlingController) + return; + + bool connected = _gears[0] == null || ((GearDisplay)_gears[0]).connected; + if (_gears[8] != null) + connected = ((GearDisplay2)_gears[8]).Evaluate(connected); + + if (connected != _internalVisible) + { + _internalVisible = connected; + if (parent != null) + parent.ChildStateChanged(this); + if (_group != null && _group.excludeInvisibles) + _group.SetBoundsChangedFlag(); + } + } + + /// + /// Mark the fairy batching state is invalid. + /// + public void InvalidateBatchingState() + { + if (displayObject != null) + displayObject.InvalidateBatchingState(); + else if ((this is GGroup) && parent != null) + parent.container.InvalidateBatchingState(true); + } + + virtual public void HandleControllerChanged(Controller c) + { + _handlingController = true; + for (int i = 0; i < 10; i++) + { + GearBase gear = _gears[i]; + if (gear != null && gear.controller == c) + gear.Apply(); + } + _handlingController = false; + + CheckGearDisplay(); + } + + /// + /// + /// + /// + /// + public void AddRelation(GObject target, RelationType relationType) + { + AddRelation(target, relationType, false); + } + + /// + /// + /// + /// + /// + /// + public void AddRelation(GObject target, RelationType relationType, bool usePercent) + { + relations.Add(target, relationType, usePercent); + } + + /// + /// + /// + /// + /// + public void RemoveRelation(GObject target, RelationType relationType) + { + relations.Remove(target, relationType); + } + + /// + /// + /// + public void RemoveFromParent() + { + if (parent != null) + parent.RemoveChild(this); + } + + /// + /// Group belonging to. + /// + public GGroup group + { + get { return _group; } + set + { + if (_group != value) + { + if (_group != null) + _group.SetBoundsChangedFlag(); + _group = value; + if (_group != null) + _group.SetBoundsChangedFlag(); + HandleVisibleChanged(); + if (parent != null) + parent.ChildStateChanged(this); + } + } + } + + /// + /// + /// + public GRoot root + { + get + { + GObject p = this; + while (p.parent != null) + p = p.parent; + + if (p is GRoot) + return (GRoot)p; + + if (p.displayObject != null && p.displayObject.parent != null) + { + DisplayObject d = p.displayObject.parent.GetChild("GRoot"); + if (d != null && (d.gOwner is GRoot)) + return (GRoot)d.gOwner; + } + + return GRoot.inst; + } + } + + /// + /// + /// + virtual public string text + { + get { return null; } + set { /*override in child*/} + } + + /// + /// + /// + virtual public string icon + { + get { return null; } + set { /*override in child*/} + } + + /// + /// + /// + public bool draggable + { + get { return _draggable; } + set + { + if (_draggable != value) + { + _draggable = value; + InitDrag(); + } + } + } + + /// + /// + /// + public void StartDrag() + { + StartDrag(-1); + } + + /// + /// + /// + /// + public void StartDrag(int touchId) + { + if (displayObject.stage == null) + return; + + DragBegin(touchId); + } + + /// + /// + /// + public void StopDrag() + { + DragEnd(); + } + + /// + /// + /// + public bool dragging + { + get { return draggingObject == this; } + } + + /// + /// + /// + public Vector2 dragStartPos + { + get { return _dragTouchStartPos; } + } + + /// + /// Transforms a point from the local coordinate system to global (Stage) coordinates. + /// + /// + /// + public Vector2 LocalToGlobal(Vector2 pt) + { + if (_pivotAsAnchor) + { + pt.x += _width * _pivotX; + pt.y += _height * _pivotY; + } + return displayObject.LocalToGlobal(pt); + } + + /// + /// Transforms a point from global (Stage) coordinates to the local coordinate system. + /// + /// + /// + public Vector2 GlobalToLocal(Vector2 pt) + { + pt = displayObject.GlobalToLocal(pt); + if (_pivotAsAnchor) + { + pt.x -= _width * _pivotX; + pt.y -= _height * _pivotY; + } + return pt; + } + + /// + /// + /// + /// + /// + public Rect LocalToGlobal(Rect rect) + { + Rect ret = new Rect(); + Vector2 v = this.LocalToGlobal(new Vector2(rect.xMin, rect.yMin)); + ret.xMin = v.x; + ret.yMin = v.y; + v = this.LocalToGlobal(new Vector2(rect.xMax, rect.yMax)); + ret.xMax = v.x; + ret.yMax = v.y; + return ret; + } + + /// + /// + /// + /// + /// + public Rect GlobalToLocal(Rect rect) + { + Rect ret = new Rect(); + Vector2 v = this.GlobalToLocal(new Vector2(rect.xMin, rect.yMin)); + ret.xMin = v.x; + ret.yMin = v.y; + v = this.GlobalToLocal(new Vector2(rect.xMax, rect.yMax)); + ret.xMax = v.x; + ret.yMax = v.y; + return ret; + } + + /// + /// Transforms a point from the local coordinate system to GRoot coordinates. + /// + /// + /// + /// + public Vector2 LocalToRoot(Vector2 pt, GRoot r) + { + pt = LocalToGlobal(pt); + if (r == null || r == GRoot.inst) + { + //fast + pt.x /= UIContentScaler.scaleFactor; + pt.y /= UIContentScaler.scaleFactor; + return pt; + } + else + return r.GlobalToLocal(pt); + } + + /// + /// Transforms a point from the GRoot coordinate to local coordinates system. + /// + /// + /// + /// + public Vector2 RootToLocal(Vector2 pt, GRoot r) + { + if (r == null || r == GRoot.inst) + { + //fast + pt.x *= UIContentScaler.scaleFactor; + pt.y *= UIContentScaler.scaleFactor; + } + else + pt = r.LocalToGlobal(pt); + return GlobalToLocal(pt); + } + + /// + /// + /// + /// + /// + public Vector2 WorldToLocal(Vector3 pt) + { + return WorldToLocal(pt, HitTestContext.cachedMainCamera); + } + + /// + /// + /// + /// + /// + /// + public Vector2 WorldToLocal(Vector3 pt, Camera camera) + { + Vector3 v = camera.WorldToScreenPoint(pt); + v.y = Screen.height - v.y; + v.z = 0; + return GlobalToLocal(v); + } + + /// + /// + /// + /// + /// + /// + public Vector2 TransformPoint(Vector2 pt, GObject targetSpace) + { + if (_pivotAsAnchor) + { + pt.x += _width * _pivotX; + pt.y += _height * _pivotY; + } + return this.displayObject.TransformPoint(pt, targetSpace != null ? targetSpace.displayObject : Stage.inst); + } + + /// + /// + /// + /// + /// + /// + public Rect TransformRect(Rect rect, GObject targetSpace) + { + if (_pivotAsAnchor) + { + rect.x += _width * _pivotX; + rect.y += _height * _pivotY; + } + return this.displayObject.TransformRect(rect, targetSpace != null ? targetSpace.displayObject : Stage.inst); + } + + /// + /// + /// + public bool isDisposed + { + get { return _disposed; } + } + + /// + /// + /// + virtual public void Dispose() + { + if (_disposed) + return; + + _disposed = true; + + RemoveFromParent(); + RemoveEventListeners(); + relations.Dispose(); + relations = null; + for (int i = 0; i < 10; i++) + { + GearBase gear = _gears[i]; + if (gear != null) + gear.Dispose(); + } + if (displayObject != null) + { + displayObject.gOwner = null; + displayObject.Dispose(); + } + data = null; + } + + /// + /// + /// + public GImage asImage + { + get { return this as GImage; } + } + + /// + /// + /// + public GComponent asCom + { + get { return this as GComponent; } + } + + /// + /// + /// + public GButton asButton + { + get { return this as GButton; } + } + + /// + /// + /// + public GLabel asLabel + { + get { return this as GLabel; } + } + + /// + /// + /// + public GProgressBar asProgress + { + get { return this as GProgressBar; } + } + + /// + /// + /// + public GSlider asSlider + { + get { return this as GSlider; } + } + + /// + /// + /// + public GComboBox asComboBox + { + get { return this as GComboBox; } + } + + /// + /// + /// + public GTextField asTextField + { + get { return this as GTextField; } + } + + /// + /// + /// + public GRichTextField asRichTextField + { + get { return this as GRichTextField; } + } + + /// + /// + /// + public GTextInput asTextInput + { + get { return this as GTextInput; } + } + + /// + /// + /// + public GLoader asLoader + { + get { return this as GLoader; } + } + + /// + /// + /// + public GLoader3D asLoader3D + { + get { return this as GLoader3D; } + } + + /// + /// + /// + public GList asList + { + get { return this as GList; } + } + + /// + /// + /// + public GGraph asGraph + { + get { return this as GGraph; } + } + + /// + /// + /// + public GGroup asGroup + { + get { return this as GGroup; } + } + + /// + /// + /// + public GMovieClip asMovieClip + { + get { return this as GMovieClip; } + } + + /// + /// + /// + public GTree asTree + { + get { return this as GTree; } + } + + /// + /// + /// + public GTreeNode treeNode + { + get { return _treeNode; } + } + + virtual protected void CreateDisplayObject() + { + } + + internal void InternalSetParent(GComponent value) + { + parent = value; + } + + virtual protected void HandlePositionChanged() + { + if (displayObject != null) + { + float xv = _x; + float yv = _y; + if (!_pivotAsAnchor) + { + xv += _width * _pivotX; + yv += _height * _pivotY; + } + displayObject.location = new Vector3(xv, yv, _z); + } + } + + virtual protected void HandleSizeChanged() + { + if (displayObject != null) + displayObject.SetSize(_width, _height); + } + + virtual protected void HandleScaleChanged() + { + if (displayObject != null) + displayObject.SetScale(_scaleX, _scaleY); + } + + virtual protected void HandleGrayedChanged() + { + if (displayObject != null) + displayObject.grayed = _grayed; + } + + virtual protected void HandleAlphaChanged() + { + if (displayObject != null) + displayObject.alpha = _alpha; + } + + virtual internal protected void HandleVisibleChanged() + { + if (displayObject != null) + displayObject.visible = internalVisible2; + } + + virtual public void ConstructFromResource() + { + } + + virtual public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + buffer.Seek(beginPos, 0); + buffer.Skip(5); + + id = buffer.ReadS(); + name = buffer.ReadS(); + float f1 = buffer.ReadInt(); + float f2 = buffer.ReadInt(); + SetXY(f1, f2); + + if (buffer.ReadBool()) + { + initWidth = buffer.ReadInt(); + initHeight = buffer.ReadInt(); + SetSize(initWidth, initHeight, true); + } + + if (buffer.ReadBool()) + { + minWidth = buffer.ReadInt(); + maxWidth = buffer.ReadInt(); + minHeight = buffer.ReadInt(); + maxHeight = buffer.ReadInt(); + } + + if (buffer.ReadBool()) + { + f1 = buffer.ReadFloat(); + f2 = buffer.ReadFloat(); + SetScale(f1, f2); + } + + if (buffer.ReadBool()) + { + f1 = buffer.ReadFloat(); + f2 = buffer.ReadFloat(); + this.skew = new Vector2(f1, f2); + } + + if (buffer.ReadBool()) + { + f1 = buffer.ReadFloat(); + f2 = buffer.ReadFloat(); + SetPivot(f1, f2, buffer.ReadBool()); + } + + f1 = buffer.ReadFloat(); + if (f1 != 1) + this.alpha = f1; + + f1 = buffer.ReadFloat(); + if (f1 != 0) + this.rotation = f1; + + if (!buffer.ReadBool()) + this.visible = false; + if (!buffer.ReadBool()) + this.touchable = false; + if (buffer.ReadBool()) + this.grayed = true; + this.blendMode = (BlendMode)buffer.ReadByte(); + + int filter = buffer.ReadByte(); + if (filter == 1) + { + ColorFilter cf = new ColorFilter(); + this.filter = cf; + + cf.AdjustBrightness(buffer.ReadFloat()); + cf.AdjustContrast(buffer.ReadFloat()); + cf.AdjustSaturation(buffer.ReadFloat()); + cf.AdjustHue(buffer.ReadFloat()); + } + + string str = buffer.ReadS(); + if (str != null) + this.data = str; + } + + virtual public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + buffer.Seek(beginPos, 1); + + string str = buffer.ReadS(); + if (str != null) + this.tooltips = str; + + int groupId = buffer.ReadShort(); + if (groupId >= 0) + group = parent.GetChildAt(groupId) as GGroup; + + buffer.Seek(beginPos, 2); + + int cnt = buffer.ReadShort(); + for (int i = 0; i < cnt; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + GearBase gear = GetGear(buffer.ReadByte()); + gear.Setup(buffer); + + buffer.position = nextPos; + } + } + + #region Drag support + Vector2 _dragTouchStartPos; + bool _dragTesting; + + static Vector2 sGlobalDragStart = new Vector2(); + static Rect sGlobalRect = new Rect(); + static bool sUpdateInDragging = false; + + private void InitDrag() + { + if (_draggable) + { + onTouchBegin.Add(__touchBegin); + onTouchMove.Add(__touchMove); + onTouchEnd.Add(__touchEnd); + } + else + { + onTouchBegin.Remove(__touchBegin); + onTouchMove.Remove(__touchMove); + onTouchEnd.Remove(__touchEnd); + } + } + + private void DragBegin(int touchId) + { + if (DispatchEvent("onDragStart", touchId)) + return; + + if (draggingObject != null) + { + GObject tmp = draggingObject; + draggingObject.StopDrag(); + draggingObject = null; + tmp.DispatchEvent("onDragEnd", null); + } + + onTouchMove.Add(__touchMove); + onTouchEnd.Add(__touchEnd); + + sGlobalDragStart = Stage.inst.GetTouchPosition(touchId); + sGlobalRect = this.LocalToGlobal(new Rect(0, 0, this.width, this.height)); + _dragTesting = false; + + draggingObject = this; + Stage.inst.AddTouchMonitor(touchId, this); + } + + private void DragEnd() + { + if (draggingObject == this) + { + _dragTesting = false; + draggingObject = null; + } + } + + private void __touchBegin(EventContext context) + { + if ((Stage.inst.focus is InputTextField) && ((InputTextField)Stage.inst.focus).editable) + { + _dragTesting = false; + return; + } + + InputEvent evt = context.inputEvent; + _dragTouchStartPos = evt.position; + _dragTesting = true; + context.CaptureTouch(); + } + + private void __touchMove(EventContext context) + { + InputEvent evt = context.inputEvent; + + if (_dragTesting && draggingObject != this) + { + int sensitivity; + if (Stage.touchScreen) + sensitivity = UIConfig.touchDragSensitivity; + else + sensitivity = UIConfig.clickDragSensitivity; + if (Mathf.Abs(_dragTouchStartPos.x - evt.x) < sensitivity + && Mathf.Abs(_dragTouchStartPos.y - evt.y) < sensitivity) + return; + + _dragTesting = false; + DragBegin(evt.touchId); + } + + if (draggingObject == this) + { + float xx = evt.x - sGlobalDragStart.x + sGlobalRect.x; + float yy = evt.y - sGlobalDragStart.y + sGlobalRect.y; + + if (dragBounds != null) + { + Rect rect = GRoot.inst.LocalToGlobal((Rect)dragBounds); + if (xx < rect.x) + xx = rect.x; + else if (xx + sGlobalRect.width > rect.xMax) + { + xx = rect.xMax - sGlobalRect.width; + if (xx < rect.x) + xx = rect.x; + } + + if (yy < rect.y) + yy = rect.y; + else if (yy + sGlobalRect.height > rect.yMax) + { + yy = rect.yMax - sGlobalRect.height; + if (yy < rect.y) + yy = rect.y; + } + } + + Vector2 pt = this.parent.GlobalToLocal(new Vector2(xx, yy)); + if (float.IsNaN(pt.x)) + return; + + sUpdateInDragging = true; + this.SetXY(Mathf.RoundToInt(pt.x), Mathf.RoundToInt(pt.y)); + sUpdateInDragging = false; + + DispatchEvent("onDragMove", null); + } + } + + private void __touchEnd(EventContext context) + { + if (draggingObject == this) + { + draggingObject = null; + DispatchEvent("onDragEnd", null); + } + } + #endregion + + #region Tween Helpers + public GTweener TweenMove(Vector2 endValue, float duration) + { + return GTween.To(this.xy, endValue, duration).SetTarget(this, TweenPropType.XY); + } + + public GTweener TweenMoveX(float endValue, float duration) + { + return GTween.To(_x, endValue, duration).SetTarget(this, TweenPropType.X); + } + + public GTweener TweenMoveY(float endValue, float duration) + { + return GTween.To(_y, endValue, duration).SetTarget(this, TweenPropType.Y); + } + + public GTweener TweenScale(Vector2 endValue, float duration) + { + return GTween.To(this.scale, endValue, duration).SetTarget(this, TweenPropType.Scale); + } + + public GTweener TweenScaleX(float endValue, float duration) + { + return GTween.To(_scaleX, endValue, duration).SetTarget(this, TweenPropType.ScaleX); + } + + public GTweener TweenScaleY(float endValue, float duration) + { + return GTween.To(_scaleY, endValue, duration).SetTarget(this, TweenPropType.ScaleY); + } + + public GTweener TweenResize(Vector2 endValue, float duration) + { + return GTween.To(this.size, endValue, duration).SetTarget(this, TweenPropType.Size); + } + + public GTweener TweenFade(float endValue, float duration) + { + return GTween.To(_alpha, endValue, duration).SetTarget(this, TweenPropType.Alpha); + } + + public GTweener TweenRotate(float endValue, float duration) + { + return GTween.To(_rotation, endValue, duration).SetTarget(this, TweenPropType.Rotation); + } + #endregion + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs.meta new file mode 100644 index 0000000..dd83393 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GObject.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d3ab09a55620b5f40a544e775edc4b22 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs new file mode 100644 index 0000000..baafadd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs @@ -0,0 +1,106 @@ +using UnityEngine; +using System.Collections.Generic; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GObjectPool is use for GObject pooling. + /// + public class GObjectPool + { + /// + /// Callback function when a new object is creating. + /// + /// + public delegate void InitCallbackDelegate(GObject obj); + + /// + /// Callback function when a new object is creating. + /// + public InitCallbackDelegate initCallback; + + Dictionary> _pool; + Transform _manager; + + /// + /// 需要设置一个manager,加入池里的对象都成为这个manager的孩子 + /// + /// + public GObjectPool(Transform manager) + { + _manager = manager; + _pool = new Dictionary>(); + } + + /// + /// Dispose all objects in the pool. + /// + public void Clear() + { + foreach (KeyValuePair> kv in _pool) + { + Queue list = kv.Value; + foreach (GObject obj in list) + obj.Dispose(); + } + _pool.Clear(); + } + + /// + /// + /// + public int count + { + get { return _pool.Count; } + } + + /// + /// + /// + /// + /// + public GObject GetObject(string url) + { + url = UIPackage.NormalizeURL(url); + if (url == null) + return null; + + Queue arr; + if (_pool.TryGetValue(url, out arr) + && arr.Count > 0) + return arr.Dequeue(); + + GObject obj = UIPackage.CreateObjectFromURL(url); + if (obj != null) + { + if (initCallback != null) + initCallback(obj); + } + + return obj; + } + + /// + /// + /// + /// + public void ReturnObject(GObject obj) + { + if (obj.displayObject.isDisposed) + return; + + string url = obj.resourceURL; + Queue arr; + if (!_pool.TryGetValue(url, out arr)) + { + arr = new Queue(); + _pool.Add(url, arr); + } + + if (_manager != null) + obj.displayObject.cachedTransform.SetParent(_manager, false); + arr.Enqueue(obj); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs.meta new file mode 100644 index 0000000..426e906 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GObjectPool.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: bb355b8d4ba140f469be6be6b062dfda +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs new file mode 100644 index 0000000..50d3748 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs @@ -0,0 +1,311 @@ +using System; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GProgressBar class. + /// + public class GProgressBar : GComponent + { + double _min; + double _max; + double _value; + ProgressTitleType _titleType; + bool _reverse; + + GObject _titleObject; + GMovieClip _aniObject; + GObject _barObjectH; + GObject _barObjectV; + float _barMaxWidth; + float _barMaxHeight; + float _barMaxWidthDelta; + float _barMaxHeightDelta; + float _barStartX; + float _barStartY; + + public GProgressBar() + { + _value = 50; + _max = 100; + } + + /// + /// + /// + public ProgressTitleType titleType + { + + get + { + return _titleType; + } + set + { + if (_titleType != value) + { + _titleType = value; + Update(_value); + } + } + } + + /// + /// + /// + public double min + { + get + { + return _min; + } + set + { + if (_min != value) + { + _min = value; + Update(_value); + } + } + } + + /// + /// + /// + public double max + { + get + { + return _max; + } + set + { + if (_max != value) + { + _max = value; + Update(_value); + } + } + } + + /// + /// + /// + public double value + { + get + { + return _value; + } + set + { + if (_value != value) + { + GTween.Kill(this, TweenPropType.Progress, false); + + _value = value; + Update(_value); + } + } + } + + public bool reverse + { + get { return _reverse; } + set { _reverse = value; } + } + + /// + /// 动态改变进度值。 + /// + /// + /// + public GTweener TweenValue(double value, float duration) + { + double oldValule; + + GTweener twener = GTween.GetTween(this, TweenPropType.Progress); + if (twener != null) + { + oldValule = twener.value.d; + twener.Kill(false); + } + else + oldValule = _value; + + _value = value; + return GTween.ToDouble(oldValule, _value, duration) + .SetEase(EaseType.Linear) + .SetTarget(this, TweenPropType.Progress); + } + + /// + /// + /// + /// + public void Update(double newValue) + { + float percent = Mathf.Clamp01((float)((newValue - _min) / (_max - _min))); + if (_titleObject != null) + { + switch (_titleType) + { + case ProgressTitleType.Percent: + if (RTLSupport.BaseDirection == RTLSupport.DirectionType.RTL) + _titleObject.text = "%" + Mathf.FloorToInt(percent * 100); + else + _titleObject.text = Mathf.FloorToInt(percent * 100) + "%"; + break; + + case ProgressTitleType.ValueAndMax: + if (RTLSupport.BaseDirection == RTLSupport.DirectionType.RTL) + _titleObject.text = Math.Round(max) + "/" + Math.Round(newValue); + else + _titleObject.text = Math.Round(newValue) + "/" + Math.Round(max); + break; + + case ProgressTitleType.Value: + _titleObject.text = "" + Math.Round(newValue); + break; + + case ProgressTitleType.Max: + _titleObject.text = "" + Math.Round(_max); + break; + } + } + + float fullWidth = this.width - _barMaxWidthDelta; + float fullHeight = this.height - _barMaxHeightDelta; + if (!_reverse) + { + if (_barObjectH != null) + { + if (!SetFillAmount(_barObjectH, percent)) + _barObjectH.width = Mathf.RoundToInt(fullWidth * percent); + } + if (_barObjectV != null) + { + if (!SetFillAmount(_barObjectV, percent)) + _barObjectV.height = Mathf.RoundToInt(fullHeight * percent); + } + } + else + { + if (_barObjectH != null) + { + if (!SetFillAmount(_barObjectH, 1 - percent)) + { + _barObjectH.width = Mathf.RoundToInt(fullWidth * percent); + _barObjectH.x = _barStartX + (fullWidth - _barObjectH.width); + } + } + if (_barObjectV != null) + { + if (!SetFillAmount(_barObjectV, 1 - percent)) + { + _barObjectV.height = Mathf.RoundToInt(fullHeight * percent); + _barObjectV.y = _barStartY + (fullHeight - _barObjectV.height); + } + } + } + if (_aniObject != null) + _aniObject.frame = Mathf.RoundToInt(percent * 100); + + InvalidateBatchingState(true); + } + + bool SetFillAmount(GObject bar, float amount) + { + if ((bar is GImage) && ((GImage)bar).fillMethod != FillMethod.None) + ((GImage)bar).fillAmount = amount; + else if ((bar is GLoader) && ((GLoader)bar).fillMethod != FillMethod.None) + ((GLoader)bar).fillAmount = amount; + else + return false; + + return true; + } + + override protected void ConstructExtension(ByteBuffer buffer) + { + buffer.Seek(0, 6); + + _titleType = (ProgressTitleType)buffer.ReadByte(); + _reverse = buffer.ReadBool(); + + _titleObject = GetChild("title"); + _barObjectH = GetChild("bar"); + _barObjectV = GetChild("bar_v"); + _aniObject = GetChild("ani") as GMovieClip; + + if (_barObjectH != null) + { + _barMaxWidth = _barObjectH.width; + _barMaxWidthDelta = this.width - _barMaxWidth; + _barStartX = _barObjectH.x; + } + if (_barObjectV != null) + { + _barMaxHeight = _barObjectV.height; + _barMaxHeightDelta = this.height - _barMaxHeight; + _barStartY = _barObjectV.y; + } + } + + override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_AfterAdd(buffer, beginPos); + + if (!buffer.Seek(beginPos, 6)) + { + Update(_value); + return; + } + + if ((ObjectType)buffer.ReadByte() != packageItem.objectType) + { + Update(_value); + return; + } + + _value = buffer.ReadInt(); + _max = buffer.ReadInt(); + if (buffer.version >= 2) + _min = buffer.ReadInt(); + + if (buffer.version >= 5) + { + string sound = buffer.ReadS(); + if (!string.IsNullOrEmpty(sound)) + { + float volumeScale = buffer.ReadFloat(); + displayObject.onClick.Add(() => + { + NAudioClip audioClip = UIPackage.GetItemAssetByURL(sound) as NAudioClip; + if (audioClip != null && audioClip.nativeClip != null) + Stage.inst.PlayOneShotSound(audioClip.nativeClip, volumeScale); + }); + } + else + buffer.Skip(4); + } + + Update(_value); + } + + override protected void HandleSizeChanged() + { + base.HandleSizeChanged(); + + if (_barObjectH != null) + _barMaxWidth = this.width - _barMaxWidthDelta; + if (_barObjectV != null) + _barMaxHeight = this.height - _barMaxHeightDelta; + + if (!this.underConstruct) + Update(_value); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs.meta new file mode 100644 index 0000000..3a1a62a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GProgressBar.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4f13bf1fdc7711c4aa9c5e1631138025 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs new file mode 100644 index 0000000..7df005e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using FairyGUI.Utils; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// GRichTextField class. + /// + public class GRichTextField : GTextField + { + /// + /// + /// + public RichTextField richTextField { get; private set; } + + public GRichTextField() + : base() + { + } + + override protected void CreateDisplayObject() + { + richTextField = new RichTextField(); + richTextField.gOwner = this; + displayObject = richTextField; + + _textField = richTextField.textField; + } + + override protected void SetTextFieldText() + { + string str = _text; + if (_templateVars != null) + str = ParseTemplate(str); + + _textField.maxWidth = maxWidth; + if (_ubbEnabled) + richTextField.htmlText = UBBParser.inst.Parse(str); + else + richTextField.htmlText = str; + } + + /// + /// + /// + public Dictionary emojies + { + get { return richTextField.emojies; } + set { richTextField.emojies = value; } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs.meta new file mode 100644 index 0000000..99f8f3b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GRichTextField.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c329d14f7b7d35348be7ec3e2a4b0591 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs new file mode 100644 index 0000000..e5d7d72 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs @@ -0,0 +1,856 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// GRoot is a topmost component of UI display list.You dont need to create GRoot. It is created automatically. + /// + public class GRoot : GComponent + { + /// + /// + /// + public static float contentScaleFactor + { + get { return UIContentScaler.scaleFactor; } + } + + /// + /// + /// + public static int contentScaleLevel + { + get { return UIContentScaler.scaleLevel; } + } + + GGraph _modalLayer; + GObject _modalWaitPane; + List _popupStack; + List _justClosedPopups; + HashSet _specialPopups; + GObject _tooltipWin; + GObject _defaultTooltipWin; + + internal static GRoot _inst; + public static GRoot inst + { + get + { + if (_inst == null) + Stage.Instantiate(); + + return _inst; + } + } + + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + _inst = null; + } +#endif + + public GRoot() + { + this.name = this.rootContainer.name = this.rootContainer.gameObject.name = "GRoot"; + this.opaque = false; + + _popupStack = new List(); + _justClosedPopups = new List(); + _specialPopups = new HashSet(); + + Stage.inst.onTouchBegin.AddCapture(__stageTouchBegin); + Stage.inst.onTouchEnd.AddCapture(__stageTouchEnd); + } + + override public void Dispose() + { + base.Dispose(); + + Stage.inst.onTouchBegin.RemoveCapture(__stageTouchBegin); + Stage.inst.onTouchEnd.RemoveCapture(__stageTouchEnd); + } + + /// + /// Set content scale factor. + /// + /// Design resolution of x axis. + /// Design resolution of y axis. + public void SetContentScaleFactor(int designResolutionX, int designResolutionY) + { + SetContentScaleFactor(designResolutionX, designResolutionY, UIContentScaler.ScreenMatchMode.MatchWidthOrHeight); + } + + /// + /// Set content scale factor. + /// + /// Design resolution of x axis. + /// Design resolution of y axis. + /// Match mode. + public void SetContentScaleFactor(int designResolutionX, int designResolutionY, UIContentScaler.ScreenMatchMode screenMatchMode) + { + UIContentScaler scaler = Stage.inst.gameObject.GetComponent(); + scaler.designResolutionX = designResolutionX; + scaler.designResolutionY = designResolutionY; + scaler.scaleMode = UIContentScaler.ScaleMode.ScaleWithScreenSize; + scaler.screenMatchMode = screenMatchMode; + scaler.ApplyChange(); + ApplyContentScaleFactor(); + } + + /// + /// + /// + /// + public void SetContentScaleFactor(float constantScaleFactor) + { + UIContentScaler scaler = Stage.inst.gameObject.GetComponent(); + scaler.scaleMode = UIContentScaler.ScaleMode.ConstantPixelSize; + scaler.constantScaleFactor = constantScaleFactor; + scaler.ApplyChange(); + ApplyContentScaleFactor(); + } + + /// + /// This is called after screen size changed. + /// + public void ApplyContentScaleFactor() + { + this.SetSize(Mathf.CeilToInt(Stage.inst.width / UIContentScaler.scaleFactor), Mathf.CeilToInt(Stage.inst.height / UIContentScaler.scaleFactor)); + this.SetScale(UIContentScaler.scaleFactor, UIContentScaler.scaleFactor); + } + + /// + /// Display a window. + /// + /// + public void ShowWindow(Window win) + { + AddChild(win); + AdjustModalLayer(); + } + + /// + /// Call window.Hide + /// 关闭一个窗口。将调用Window.Hide方法。 + /// + /// + public void HideWindow(Window win) + { + win.Hide(); + } + + /// + /// Remove a window from stage immediatelly. window.Hide/window.OnHide will never be called. + ///立刻关闭一个窗口。不会调用Window.Hide方法,Window.OnHide也不会被调用。 + /// + /// + public void HideWindowImmediately(Window win) + { + HideWindowImmediately(win, false); + } + + /// + /// Remove a window from stage immediatelly. window.Hide/window.OnHide will never be called. + /// 立刻关闭一个窗口。不会调用Window.Hide方法,Window.OnHide也不会被调用。 + /// + /// + /// True to dispose the window. + public void HideWindowImmediately(Window win, bool dispose) + { + if (win.parent == this) + RemoveChild(win, dispose); + else if (dispose) + win.Dispose(); + + AdjustModalLayer(); + } + + /// + /// 将一个窗口提到所有窗口的最前面 + /// + /// + public void BringToFront(Window win) + { + int cnt = this.numChildren; + int i; + if (_modalLayer != null && _modalLayer.parent != null && !win.modal) + i = GetChildIndex(_modalLayer) - 1; + else + i = cnt - 1; + + for (; i >= 0; i--) + { + GObject g = GetChildAt(i); + if (g == win) + return; + if (g is Window) + break; + } + + if (i >= 0) + SetChildIndex(win, i); + } + + /// + /// Display a modal layer and a waiting sign in the front. + /// 显示一个半透明层和一个等待标志在最前面。半透明层的颜色可以通过UIConfig.modalLayerColor设定。 + /// 等待标志的资源可以通过UIConfig.globalModalWaiting。等待标志组件会设置为屏幕大小,请内部做好关联。 + /// + public void ShowModalWait() + { + if (UIConfig.globalModalWaiting != null) + { + if (_modalWaitPane == null || _modalWaitPane.isDisposed) + { + _modalWaitPane = UIPackage.CreateObjectFromURL(UIConfig.globalModalWaiting); + _modalWaitPane.SetHome(this); + } + _modalWaitPane.SetSize(this.width, this.height); + _modalWaitPane.AddRelation(this, RelationType.Size); + + AddChild(_modalWaitPane); + } + } + + /// + /// Hide modal layer and waiting sign. + /// + public void CloseModalWait() + { + if (_modalWaitPane != null && _modalWaitPane.parent != null) + RemoveChild(_modalWaitPane); + } + + /// + /// Close all windows except modal windows. + /// + public void CloseAllExceptModals() + { + GObject[] arr = _children.ToArray(); + foreach (GObject g in arr) + { + if ((g is Window) && !(g as Window).modal) + HideWindowImmediately(g as Window); + } + } + + /// + /// Close all windows. + /// + public void CloseAllWindows() + { + GObject[] arr = _children.ToArray(); + foreach (GObject g in arr) + { + if (g is Window) + HideWindowImmediately(g as Window); + } + } + + /// + /// Get window on top. + /// + /// + public Window GetTopWindow() + { + int cnt = this.numChildren; + for (int i = cnt - 1; i >= 0; i--) + { + GObject g = this.GetChildAt(i); + if (g is Window) + { + return (Window)(g); + } + } + + return null; + } + + /// + /// + /// + public GGraph modalLayer + { + get + { + if (_modalLayer == null || _modalLayer.isDisposed) + CreateModalLayer(); + + return _modalLayer; + } + } + + void CreateModalLayer() + { + _modalLayer = new GGraph(); + _modalLayer.DrawRect(this.width, this.height, 0, Color.white, UIConfig.modalLayerColor); + _modalLayer.AddRelation(this, RelationType.Size); + _modalLayer.name = _modalLayer.gameObjectName = "ModalLayer"; + _modalLayer.SetHome(this); + } + + /// + /// Return true if a modal window is on stage. + /// + public bool hasModalWindow + { + get { return _modalLayer != null && _modalLayer.parent != null; } + } + + /// + /// Return true if modal waiting layer is on stage. + /// + public bool modalWaiting + { + get + { + return (_modalWaitPane != null) && _modalWaitPane.onStage; + } + } + + /// + /// Get current touch target. (including hover) + /// + public GObject touchTarget + { + get + { + return DisplayObjectToGObject(Stage.inst.touchTarget); + } + } + + /// + /// + /// + /// + /// + public GObject DisplayObjectToGObject(DisplayObject obj) + { + while (obj != null) + { + if (obj.gOwner != null) + return obj.gOwner; + + obj = obj.parent; + } + return null; + } + + private void AdjustModalLayer() + { + if (_modalLayer == null || _modalLayer.isDisposed) + CreateModalLayer(); + + int cnt = this.numChildren; + + if (_modalWaitPane != null && _modalWaitPane.parent != null) + SetChildIndex(_modalWaitPane, cnt - 1); + + for (int i = cnt - 1; i >= 0; i--) + { + GObject g = this.GetChildAt(i); + if ((g is Window) && (g as Window).modal) + { + if (_modalLayer.parent == null) + AddChildAt(_modalLayer, i); + else + SetChildIndexBefore(_modalLayer, i); + return; + } + } + + if (_modalLayer.parent != null) + RemoveChild(_modalLayer); + } + + /// + /// Show a popup object. + /// 显示一个popup。 + /// popup的特点是点击popup对象外的区域,popup对象将自动消失。 + /// + /// + public void ShowPopup(GObject popup) + { + ShowPopup(popup, null, PopupDirection.Auto, false); + } + + /// + /// Show a popup object along with the specific target object. + /// 显示一个popup。将popup显示在指定对象的上边或者下边。 + /// popup的特点是点击popup对象外的区域,popup对象将自动消失。 + /// + /// + /// + public void ShowPopup(GObject popup, GObject target) + { + ShowPopup(popup, target, PopupDirection.Auto, false); + } + + [Obsolete] + public void ShowPopup(GObject popup, GObject target, object downward) + { + ShowPopup(popup, target, + downward == null ? PopupDirection.Auto : ((bool)downward == true ? PopupDirection.Down : PopupDirection.Up), + false); + } + + /// + /// Show a popup object along with the specific target object. + /// 显示一个popup。将popup显示在指定对象的上方或者下方。 + /// popup的特点是点击popup对象外的区域,popup对象将自动消失。 + /// + /// + /// + /// + public void ShowPopup(GObject popup, GObject target, PopupDirection dir) + { + ShowPopup(popup, target, dir, false); + } + + /// + /// Show a popup object along with the specific target object. + /// 显示一个popup。将popup显示在指定对象的上方或者下方。 + /// popup的特点是点击popup对象外的区域,popup对象将自动消失。 + /// 默认情况下,popup在touchEnd事件中关闭;特别设置closeUntilUpEvent=true则可使该popup在touchEnd中才关闭。 + /// + /// + /// + /// + /// + public void ShowPopup(GObject popup, GObject target, PopupDirection dir, bool closeUntilUpEvent) + { + if (_popupStack.Count > 0) + { + int k = _popupStack.IndexOf(popup); + if (k != -1) + { + for (int i = _popupStack.Count - 1; i >= k; i--) + { + int last = _popupStack.Count - 1; + GObject obj = _popupStack[last]; + ClosePopup(obj); + _popupStack.RemoveAt(last); + _specialPopups.Remove(obj); + } + } + } + _popupStack.Add(popup); + if (closeUntilUpEvent) + _specialPopups.Add(popup); + + if (target != null) + { + GObject p = target; + while (p != null) + { + if (p.parent == this) + { + if (popup.sortingOrder < p.sortingOrder) + { + popup.sortingOrder = p.sortingOrder; + } + break; + } + p = p.parent; + } + } + + AddChild(popup); + AdjustModalLayer(); + + if ((popup is Window) && target == null && dir == PopupDirection.Auto) + return; + + Vector2 pos = GetPoupPosition(popup, target, dir); + popup.xy = pos; + } + + [Obsolete] + public Vector2 GetPoupPosition(GObject popup, GObject target, object downward) + { + return GetPoupPosition(popup, target, + downward == null ? PopupDirection.Auto : ((bool)downward == true ? PopupDirection.Down : PopupDirection.Up)); + } + + /// + /// + /// + /// + /// + /// + /// + public Vector2 GetPoupPosition(GObject popup, GObject target, PopupDirection dir) + { + Vector2 pos; + Vector2 size = Vector2.zero; + if (target != null) + { + pos = target.LocalToRoot(Vector2.zero, this); + size = target.LocalToRoot(target.size, this) - pos; + } + else + { + pos = this.GlobalToLocal(Stage.inst.touchPosition); + } + float xx, yy; + xx = pos.x; + if (xx + popup.width > this.width) + xx = xx + size.x - popup.width; + yy = pos.y + size.y; + if ((dir == PopupDirection.Auto && yy + popup.height > this.height) + || dir == PopupDirection.Up) + { + yy = pos.y - popup.height - 1; + if (yy < 0) + { + yy = 0; + xx += size.x / 2; + } + } + + return new Vector2(Mathf.RoundToInt(xx), Mathf.RoundToInt(yy)); + } + + /// + /// If a popup is showing, then close it; otherwise, open it. + /// + /// + public void TogglePopup(GObject popup) + { + TogglePopup(popup, null, PopupDirection.Auto, false); + } + + /// + /// + /// + /// + /// + public void TogglePopup(GObject popup, GObject target) + { + TogglePopup(popup, target, PopupDirection.Auto, false); + } + + [Obsolete] + public void TogglePopup(GObject popup, GObject target, object downward) + { + TogglePopup(popup, target, + downward == null ? PopupDirection.Auto : ((bool)downward == true ? PopupDirection.Down : PopupDirection.Up), + false); + } + + /// + /// + /// + /// + /// + /// + public void TogglePopup(GObject popup, GObject target, PopupDirection dir) + { + TogglePopup(popup, target, dir, false); + } + + /// + /// + /// + /// + /// + /// + /// + public void TogglePopup(GObject popup, GObject target, PopupDirection dir, bool closeUntilUpEvent) + { + if (_justClosedPopups.IndexOf(popup) != -1) + return; + + ShowPopup(popup, target, dir, closeUntilUpEvent); + } + + /// + /// Close all popups. + /// + public void HidePopup() + { + HidePopup(null); + } + + /// + /// Close a popup. + /// + /// + public void HidePopup(GObject popup) + { + if (popup != null) + { + int k = _popupStack.IndexOf(popup); + if (k != -1) + { + for (int i = _popupStack.Count - 1; i >= k; i--) + { + int last = _popupStack.Count - 1; + GObject obj = _popupStack[last]; + ClosePopup(obj); + _popupStack.RemoveAt(last); + _specialPopups.Remove(obj); + } + } + } + else + { + foreach (GObject obj in _popupStack) + ClosePopup(obj); + _popupStack.Clear(); + _specialPopups.Clear(); + } + } + + /// + /// + /// + public bool hasAnyPopup + { + get { return _popupStack.Count > 0; } + } + + void ClosePopup(GObject target) + { + if (target.parent != null) + { + if (target is Window) + ((Window)target).Hide(); + else + RemoveChild(target); + } + } + + /// + /// + /// + /// + public void ShowTooltips(string msg) + { + ShowTooltips(msg, 0.1f); + } + + /// + /// + /// + /// + /// + public void ShowTooltips(string msg, float delay) + { + if (_defaultTooltipWin == null || _defaultTooltipWin.isDisposed) + { + string resourceURL = UIConfig.tooltipsWin; + if (string.IsNullOrEmpty(resourceURL)) + { + Debug.LogWarning("FairyGUI: UIConfig.tooltipsWin not defined"); + return; + } + + _defaultTooltipWin = UIPackage.CreateObjectFromURL(resourceURL); + _defaultTooltipWin.SetHome(this); + _defaultTooltipWin.touchable = false; + } + + _defaultTooltipWin.text = msg; + ShowTooltipsWin(_defaultTooltipWin, delay); + } + + /// + /// + /// + /// + public void ShowTooltipsWin(GObject tooltipWin) + { + ShowTooltipsWin(tooltipWin, 0.1f); + } + + /// + /// + /// + /// + /// + public void ShowTooltipsWin(GObject tooltipWin, float delay) + { + HideTooltips(); + + _tooltipWin = tooltipWin; + Timers.inst.Add(delay, 1, __showTooltipsWin); + } + + void __showTooltipsWin(object param) + { + if (_tooltipWin == null) + return; + + float xx = Stage.inst.touchPosition.x + 10; + float yy = Stage.inst.touchPosition.y + 20; + + Vector2 pt = this.GlobalToLocal(new Vector2(xx, yy)); + xx = pt.x; + yy = pt.y; + + if (xx + _tooltipWin.width > this.width) + xx = xx - _tooltipWin.width; + if (yy + _tooltipWin.height > this.height) + { + yy = yy - _tooltipWin.height - 1; + if (yy < 0) + yy = 0; + } + + _tooltipWin.x = Mathf.RoundToInt(xx); + _tooltipWin.y = Mathf.RoundToInt(yy); + AddChild(_tooltipWin); + } + + /// + /// + /// + public void HideTooltips() + { + if (_tooltipWin != null) + { + if (_tooltipWin.parent != null) + RemoveChild(_tooltipWin); + _tooltipWin = null; + } + } + + /// + /// + /// + public GObject focus + { + get + { + GObject obj = DisplayObjectToGObject(Stage.inst.focus); + if (obj != null && !IsAncestorOf(obj)) + return null; + else + return obj; + } + + set + { + if (value == null) + Stage.inst.focus = null; + else + Stage.inst.focus = value.displayObject; + } + } + + void __stageTouchBegin(EventContext context) + { + if (_tooltipWin != null) + HideTooltips(); + + CheckPopups(true); + } + + void __stageTouchEnd(EventContext context) + { + CheckPopups(false); + } + + void CheckPopups(bool touchBegin) + { + if (touchBegin) + _justClosedPopups.Clear(); + + if (_popupStack.Count > 0) + { + DisplayObject mc = Stage.inst.touchTarget as DisplayObject; + bool handled = false; + while (mc != Stage.inst && mc != null) + { + if (mc.gOwner != null) + { + int k = _popupStack.IndexOf(mc.gOwner); + if (k != -1) + { + for (int i = _popupStack.Count - 1; i > k; i--) + { + int last = _popupStack.Count - 1; + GObject popup = _popupStack[last]; + if (touchBegin == _specialPopups.Contains(popup)) + continue; + + ClosePopup(popup); + _justClosedPopups.Add(popup); + _popupStack.RemoveAt(last); + _specialPopups.Remove(popup); + } + handled = true; + break; + } + } + mc = mc.parent; + } + + if (!handled) + { + for (int i = _popupStack.Count - 1; i >= 0; i--) + { + GObject popup = _popupStack[i]; + if (touchBegin == _specialPopups.Contains(popup)) + continue; + + ClosePopup(popup); + _justClosedPopups.Add(popup); + _popupStack.RemoveAt(i); + _specialPopups.Remove(popup); + } + } + } + } + + /// + /// + /// + public void EnableSound() + { + Stage.inst.EnableSound(); + } + + /// + /// + /// + public void DisableSound() + { + Stage.inst.DisableSound(); + } + + /// + /// + /// + /// + /// + public void PlayOneShotSound(AudioClip clip, float volumeScale) + { + Stage.inst.PlayOneShotSound(clip, volumeScale); + } + + /// + /// + /// + /// + public void PlayOneShotSound(AudioClip clip) + { + Stage.inst.PlayOneShotSound(clip); + } + + /// + /// + /// + public float soundVolume + { + get { return Stage.inst.soundVolume; } + set { Stage.inst.soundVolume = value; } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs.meta new file mode 100644 index 0000000..f7a47c3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GRoot.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c82e50658ca58b2459448b9c86cb4777 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs new file mode 100644 index 0000000..c490ce1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs @@ -0,0 +1,226 @@ +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// GScrollBar class. + /// + public class GScrollBar : GComponent + { + GObject _grip; + GObject _arrowButton1; + GObject _arrowButton2; + GObject _bar; + ScrollPane _target; + + bool _vertical; + float _scrollPerc; + bool _fixedGripSize; + bool _gripDragging; + + Vector2 _dragOffset; + + public GScrollBar() + { + _scrollPerc = 0; + } + + /// + /// + /// + /// + /// + public void SetScrollPane(ScrollPane target, bool vertical) + { + _target = target; + _vertical = vertical; + } + + /// + /// + /// + public void SetDisplayPerc(float value) + { + if (_vertical) + { + if (!_fixedGripSize) + _grip.height = Mathf.FloorToInt(value * _bar.height); + _grip.y = Mathf.RoundToInt(_bar.y + (_bar.height - _grip.height) * _scrollPerc); + } + else + { + if (!_fixedGripSize) + _grip.width = Mathf.FloorToInt(value * _bar.width); + _grip.x = Mathf.RoundToInt(_bar.x + (_bar.width - _grip.width) * _scrollPerc); + } + + _grip.visible = value != 0 && value != 1; + } + + /// + /// + /// + public void setScrollPerc(float value) + { + _scrollPerc = value; + if (_vertical) + _grip.y = Mathf.RoundToInt(_bar.y + (_bar.height - _grip.height) * _scrollPerc); + else + _grip.x = Mathf.RoundToInt(_bar.x + (_bar.width - _grip.width) * _scrollPerc); + } + + /// + /// + /// + public float minSize + { + get + { + if (_vertical) + return (_arrowButton1 != null ? _arrowButton1.height : 0) + (_arrowButton2 != null ? _arrowButton2.height : 0); + else + return (_arrowButton1 != null ? _arrowButton1.width : 0) + (_arrowButton2 != null ? _arrowButton2.width : 0); + } + } + + /// + /// + /// + public bool gripDragging + { + get + { + return _gripDragging; + } + } + + override protected void ConstructExtension(ByteBuffer buffer) + { + buffer.Seek(0, 6); + + _fixedGripSize = buffer.ReadBool(); + + _grip = GetChild("grip"); + if (_grip == null) + { + Debug.LogWarning("FairyGUI: " + this.resourceURL + " should define grip"); + return; + } + + _bar = GetChild("bar"); + if (_bar == null) + { + Debug.LogWarning("FairyGUI: " + this.resourceURL + " should define bar"); + return; + } + + _arrowButton1 = GetChild("arrow1"); + _arrowButton2 = GetChild("arrow2"); + + _grip.onTouchBegin.Add(__gripTouchBegin); + _grip.onTouchMove.Add(__gripTouchMove); + _grip.onTouchEnd.Add(__gripTouchEnd); + + this.onTouchBegin.Add(__touchBegin); + if (_arrowButton1 != null) + _arrowButton1.onTouchBegin.Add(__arrowButton1Click); + if (_arrowButton2 != null) + _arrowButton2.onTouchBegin.Add(__arrowButton2Click); + } + + void __gripTouchBegin(EventContext context) + { + if (_bar == null) + return; + + context.StopPropagation(); + + InputEvent evt = context.inputEvent; + if (evt.button != 0) + return; + + context.CaptureTouch(); + + _gripDragging = true; + _target.UpdateScrollBarVisible(); + + _dragOffset = this.GlobalToLocal(new Vector2(evt.x, evt.y)) - _grip.xy; + } + + void __gripTouchMove(EventContext context) + { + InputEvent evt = context.inputEvent; + Vector2 pt = this.GlobalToLocal(new Vector2(evt.x, evt.y)); + if (float.IsNaN(pt.x)) + return; + + if (_vertical) + { + float curY = pt.y - _dragOffset.y; + float diff = _bar.height - _grip.height; + if (diff == 0) + _target.percY = 0; + else + _target.percY = (curY - _bar.y) / diff; + } + else + { + float curX = pt.x - _dragOffset.x; + float diff = _bar.width - _grip.width; + if (diff == 0) + _target.percX = 0; + else + _target.percX = (curX - _bar.x) / diff; + } + } + + void __gripTouchEnd(EventContext context) + { + _gripDragging = false; + _target.UpdateScrollBarVisible(); + } + + void __arrowButton1Click(EventContext context) + { + context.StopPropagation(); + + if (_vertical) + _target.ScrollUp(); + else + _target.ScrollLeft(); + } + + void __arrowButton2Click(EventContext context) + { + context.StopPropagation(); + + if (_vertical) + _target.ScrollDown(); + else + _target.ScrollRight(); + } + + void __touchBegin(EventContext context) + { + context.StopPropagation(); + + InputEvent evt = context.inputEvent; + Vector2 pt = _grip.GlobalToLocal(new Vector2(evt.x, evt.y)); + if (_vertical) + { + if (pt.y < 0) + _target.ScrollUp(4, false); + else + _target.ScrollDown(4, false); + } + else + { + if (pt.x < 0) + _target.ScrollLeft(4, false); + else + _target.ScrollRight(4, false); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs.meta new file mode 100644 index 0000000..f0de7d0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GScrollBar.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b6b0ce43cdb60cf4e8e1ddccdf2f5082 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs new file mode 100644 index 0000000..8664264 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs @@ -0,0 +1,405 @@ +using System; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public class GSlider : GComponent + { + double _min; + double _max; + double _value; + ProgressTitleType _titleType; + bool _reverse; + bool _wholeNumbers; + + GObject _titleObject; + GObject _barObjectH; + GObject _barObjectV; + float _barMaxWidth; + float _barMaxHeight; + float _barMaxWidthDelta; + float _barMaxHeightDelta; + GObject _gripObject; + Vector2 _clickPos; + float _clickPercent; + float _barStartX; + float _barStartY; + + EventListener _onChanged; + EventListener _onGripTouchEnd; + + public bool changeOnClick; + public bool canDrag; + + public GSlider() + { + _value = 50; + _max = 100; + changeOnClick = true; + canDrag = true; + } + + /// + /// + /// + public EventListener onChanged + { + get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } + } + + /// + /// + /// + public EventListener onGripTouchEnd + { + get { return _onGripTouchEnd ?? (_onGripTouchEnd = new EventListener(this, "onGripTouchEnd")); } + } + + /// + /// + /// + public ProgressTitleType titleType + { + get + { + return _titleType; + } + set + { + if (_titleType != value) + { + _titleType = value; + Update(); + } + } + } + + /// + /// + /// + public double min + { + get + { + return _min; + } + set + { + if (_min != value) + { + _min = value; + Update(); + } + } + } + + /// + /// + /// + public double max + { + get + { + return _max; + } + set + { + if (_max != value) + { + _max = value; + Update(); + } + } + } + + /// + /// + /// + public double value + { + get + { + return _value; + } + set + { + if (_value != value) + { + _value = value; + Update(); + } + } + } + + /// + /// + /// + public bool wholeNumbers + { + get + { + return _wholeNumbers; + } + set + { + if (_wholeNumbers != value) + { + _wholeNumbers = value; + Update(); + } + } + } + + private void Update() + { + UpdateWithPercent((float)((_value - _min) / (_max - _min)), false); + } + + private void UpdateWithPercent(float percent, bool manual) + { + percent = Mathf.Clamp01(percent); + if (manual) + { + double newValue = _min + (_max - _min) * percent; + if (newValue < _min) + newValue = _min; + if (newValue > _max) + newValue = _max; + if (_wholeNumbers) + { + newValue = Math.Round(newValue); + percent = Mathf.Clamp01((float)((newValue - _min) / (_max - _min))); + } + + if (newValue != _value) + { + _value = newValue; + if (DispatchEvent("onChanged", null)) + return; + } + } + + if (_titleObject != null) + { + switch (_titleType) + { + case ProgressTitleType.Percent: + _titleObject.text = Mathf.FloorToInt(percent * 100) + "%"; + break; + + case ProgressTitleType.ValueAndMax: + _titleObject.text = Math.Round(_value) + "/" + Math.Round(max); + break; + + case ProgressTitleType.Value: + _titleObject.text = "" + Math.Round(_value); + break; + + case ProgressTitleType.Max: + _titleObject.text = "" + Math.Round(_max); + break; + } + } + + float fullWidth = this.width - _barMaxWidthDelta; + float fullHeight = this.height - _barMaxHeightDelta; + if (!_reverse) + { + if (_barObjectH != null) + { + if (!SetFillAmount(_barObjectH, percent)) + _barObjectH.width = Mathf.RoundToInt(fullWidth * percent); + } + if (_barObjectV != null) + { + if (!SetFillAmount(_barObjectV, percent)) + _barObjectV.height = Mathf.RoundToInt(fullHeight * percent); + } + } + else + { + if (_barObjectH != null) + { + if (!SetFillAmount(_barObjectH, 1 - percent)) + { + _barObjectH.width = Mathf.RoundToInt(fullWidth * percent); + _barObjectH.x = _barStartX + (fullWidth - _barObjectH.width); + } + } + if (_barObjectV != null) + { + if (!SetFillAmount(_barObjectV, 1 - percent)) + { + _barObjectV.height = Mathf.RoundToInt(fullHeight * percent); + _barObjectV.y = _barStartY + (fullHeight - _barObjectV.height); + } + } + } + + InvalidateBatchingState(true); + } + + bool SetFillAmount(GObject bar, float amount) + { + if ((bar is GImage) && ((GImage)bar).fillMethod != FillMethod.None) + ((GImage)bar).fillAmount = amount; + else if ((bar is GLoader) && ((GLoader)bar).fillMethod != FillMethod.None) + ((GLoader)bar).fillAmount = amount; + else + return false; + + return true; + } + + override protected void ConstructExtension(ByteBuffer buffer) + { + buffer.Seek(0, 6); + + _titleType = (ProgressTitleType)buffer.ReadByte(); + _reverse = buffer.ReadBool(); + if (buffer.version >= 2) + { + _wholeNumbers = buffer.ReadBool(); + this.changeOnClick = buffer.ReadBool(); + } + + _titleObject = GetChild("title"); + _barObjectH = GetChild("bar"); + _barObjectV = GetChild("bar_v"); + _gripObject = GetChild("grip"); + + if (_barObjectH != null) + { + _barMaxWidth = _barObjectH.width; + _barMaxWidthDelta = this.width - _barMaxWidth; + _barStartX = _barObjectH.x; + } + if (_barObjectV != null) + { + _barMaxHeight = _barObjectV.height; + _barMaxHeightDelta = this.height - _barMaxHeight; + _barStartY = _barObjectV.y; + } + + if (_gripObject != null) + { + _gripObject.onTouchBegin.Add(__gripTouchBegin); + _gripObject.onTouchMove.Add(__gripTouchMove); + _gripObject.onTouchEnd.Add(__gripTouchEnd); + } + + onTouchBegin.Add(__barTouchBegin); + } + + override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_AfterAdd(buffer, beginPos); + + if (!buffer.Seek(beginPos, 6)) + { + Update(); + return; + } + + if ((ObjectType)buffer.ReadByte() != packageItem.objectType) + { + Update(); + return; + } + + _value = buffer.ReadInt(); + _max = buffer.ReadInt(); + if (buffer.version >= 2) + _min = buffer.ReadInt(); + + + Update(); + } + + override protected void HandleSizeChanged() + { + base.HandleSizeChanged(); + + if (_barObjectH != null) + _barMaxWidth = this.width - _barMaxWidthDelta; + if (_barObjectV != null) + _barMaxHeight = this.height - _barMaxHeightDelta; + + if (!this.underConstruct) + Update(); + } + + private void __gripTouchBegin(EventContext context) + { + this.canDrag = true; + + context.StopPropagation(); + + InputEvent evt = context.inputEvent; + if (evt.button != 0) + return; + + context.CaptureTouch(); + + _clickPos = this.GlobalToLocal(new Vector2(evt.x, evt.y)); + _clickPercent = Mathf.Clamp01((float)((_value - _min) / (_max - _min))); + } + + private void __gripTouchMove(EventContext context) + { + if (!this.canDrag) + return; + + InputEvent evt = context.inputEvent; + Vector2 pt = this.GlobalToLocal(new Vector2(evt.x, evt.y)); + if (float.IsNaN(pt.x)) + return; + + float deltaX = pt.x - _clickPos.x; + float deltaY = pt.y - _clickPos.y; + if (_reverse) + { + deltaX = -deltaX; + deltaY = -deltaY; + } + + float percent; + if (_barObjectH != null) + percent = _clickPercent + deltaX / _barMaxWidth; + else + percent = _clickPercent + deltaY / _barMaxHeight; + + UpdateWithPercent(percent, true); + } + + private void __gripTouchEnd(EventContext context) + { + DispatchEvent("onGripTouchEnd", null); + } + + private void __barTouchBegin(EventContext context) + { + if (!changeOnClick) + return; + + InputEvent evt = context.inputEvent; + Vector2 pt = _gripObject.GlobalToLocal(new Vector2(evt.x, evt.y)); + float percent = Mathf.Clamp01((float)((_value - _min) / (_max - _min))); + float delta = 0; + if (_barObjectH != null) + delta = (pt.x - _gripObject.width / 2) / _barMaxWidth; + if (_barObjectV != null) + delta = (pt.y - _gripObject.height / 2) / _barMaxHeight; + if (_reverse) + percent -= delta; + else + percent += delta; + + UpdateWithPercent(percent, true); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs.meta new file mode 100644 index 0000000..9a70d48 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GSlider.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a2a1a4a3ec0a296489e15eb1ae1214ee +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs new file mode 100644 index 0000000..25d9fec --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs @@ -0,0 +1,438 @@ +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public class GTextField : GObject, ITextColorGear + { + protected TextField _textField; + protected string _text; + protected bool _ubbEnabled; + protected bool _updatingSize; + protected Dictionary _templateVars; + + public GTextField() + : base() + { + TextFormat tf = _textField.textFormat; + tf.font = UIConfig.defaultFont; + tf.size = 12; + tf.color = Color.black; + tf.lineSpacing = 3; + tf.letterSpacing = 0; + _textField.textFormat = tf; + + _text = string.Empty; + _textField.autoSize = AutoSizeType.Both; + _textField.wordWrap = false; + } + + override protected void CreateDisplayObject() + { + _textField = new TextField(); + _textField.gOwner = this; + displayObject = _textField; + } + + /// + /// + /// + override public string text + { + get + { + if (this is GTextInput) + _text = ((GTextInput)this).inputTextField.text; + return _text; + } + set + { + if (value == null) + value = string.Empty; + _text = value; + SetTextFieldText(); + UpdateSize(); + UpdateGear(6); + } + } + + virtual protected void SetTextFieldText() + { + string str = _text; + if (_templateVars != null) + str = ParseTemplate(str); + + _textField.maxWidth = maxWidth; + if (_ubbEnabled) + _textField.htmlText = UBBParser.inst.Parse(XMLUtils.EncodeString(str)); + else + _textField.text = str; + } + + /// + /// + /// + public Dictionary templateVars + { + get { return _templateVars; } + set + { + if (_templateVars == null && value == null) + return; + + _templateVars = value; + + FlushVars(); + } + } + + /// + /// + /// + /// + /// + /// + public GTextField SetVar(string name, string value) + { + if (_templateVars == null) + _templateVars = new Dictionary(); + _templateVars[name] = value; + + return this; + } + + /// + /// + /// + public void FlushVars() + { + SetTextFieldText(); + UpdateSize(); + } + + /// + /// + /// + public bool HasCharacter(char ch) + { + return _textField.HasCharacter(ch); + } + + protected string ParseTemplate(string template) + { + int pos1 = 0, pos2 = 0; + int pos3; + string tag; + string value; + StringBuilder buffer = new StringBuilder(); + + while ((pos2 = template.IndexOf('{', pos1)) != -1) + { + if (pos2 > 0 && template[pos2 - 1] == '\\') + { + buffer.Append(template, pos1, pos2 - pos1 - 1); + buffer.Append('{'); + pos1 = pos2 + 1; + continue; + } + + buffer.Append(template, pos1, pos2 - pos1); + pos1 = pos2; + pos2 = template.IndexOf('}', pos1); + if (pos2 == -1) + break; + + if (pos2 == pos1 + 1) + { + buffer.Append(template, pos1, 2); + pos1 = pos2 + 1; + continue; + } + + tag = template.Substring(pos1 + 1, pos2 - pos1 - 1); + pos3 = tag.IndexOf('='); + if (pos3 != -1) + { + if (!_templateVars.TryGetValue(tag.Substring(0, pos3), out value)) + value = tag.Substring(pos3 + 1); + } + else + { + if (!_templateVars.TryGetValue(tag, out value)) + value = ""; + } + buffer.Append(value); + pos1 = pos2 + 1; + } + if (pos1 < template.Length) + buffer.Append(template, pos1, template.Length - pos1); + + return buffer.ToString(); + } + + /// + /// + /// + public TextFormat textFormat + { + get + { + return _textField.textFormat; + } + set + { + _textField.textFormat = value; + if (!underConstruct) + UpdateSize(); + } + } + + /// + /// + /// + public Color color + { + get + { + return _textField.textFormat.color; + } + set + { + if (_textField.textFormat.color != value) + { + TextFormat tf = _textField.textFormat; + tf.color = value; + _textField.textFormat = tf; + UpdateGear(4); + } + } + } + + /// + /// + /// + public AlignType align + { + get { return _textField.align; } + set { _textField.align = value; } + } + + /// + /// + /// + public VertAlignType verticalAlign + { + get { return _textField.verticalAlign; } + set { _textField.verticalAlign = value; } + } + + /// + /// + /// + public bool singleLine + { + get { return _textField.singleLine; } + set { _textField.singleLine = value; } + } + + /// + /// + /// + public float stroke + { + get { return _textField.stroke; } + set { _textField.stroke = value; } + } + + /// + /// + /// + public Color strokeColor + { + get { return _textField.strokeColor; } + set + { + _textField.strokeColor = value; + UpdateGear(4); + } + } + + /// + /// + /// + public Vector2 shadowOffset + { + get { return _textField.shadowOffset; } + set { _textField.shadowOffset = value; } + } + + /// + /// + /// + public bool UBBEnabled + { + get { return _ubbEnabled; } + set { _ubbEnabled = value; } + } + + /// + /// + /// + public AutoSizeType autoSize + { + get { return _textField.autoSize; } + set + { + _textField.autoSize = value; + if (value == AutoSizeType.Both) + { + _textField.wordWrap = false; + + if (!underConstruct) + this.SetSize(_textField.textWidth, _textField.textHeight); + } + else + { + _textField.wordWrap = true; + + if (value == AutoSizeType.Height) + { + if (!underConstruct) + { + displayObject.width = this.width; + this.height = _textField.textHeight; + } + } + else + displayObject.SetSize(this.width, this.height); + } + } + } + + /// + /// + /// + public float textWidth + { + get { return _textField.textWidth; } + } + + /// + /// + /// + public float textHeight + { + get { return _textField.textHeight; } + } + + protected void UpdateSize() + { + if (_updatingSize) + return; + + _updatingSize = true; + + if (_textField.autoSize == AutoSizeType.Both) + { + this.size = displayObject.size; + InvalidateBatchingState(); + } + else if (_textField.autoSize == AutoSizeType.Height) + { + this.height = displayObject.height; + InvalidateBatchingState(); + } + + _updatingSize = false; + } + + override protected void HandleSizeChanged() + { + if (_updatingSize) + return; + + if (underConstruct) + displayObject.SetSize(this.width, this.height); + else if (_textField.autoSize != AutoSizeType.Both) + { + if (_textField.autoSize == AutoSizeType.Height) + { + displayObject.width = this.width;//先调整宽度,让文本重排 + if (_text != string.Empty) //文本为空时,1是本来就不需要调整, 2是为了防止改掉文本为空时的默认高度,造成关联错误 + SetSizeDirectly(this.width, displayObject.height); + } + else + displayObject.SetSize(this.width, this.height); + } + } + + override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 5); + + TextFormat tf = _textField.textFormat; + + tf.font = buffer.ReadS(); + tf.size = buffer.ReadShort(); + tf.color = buffer.ReadColor(); + this.align = (AlignType)buffer.ReadByte(); + this.verticalAlign = (VertAlignType)buffer.ReadByte(); + tf.lineSpacing = buffer.ReadShort(); + tf.letterSpacing = buffer.ReadShort(); + _ubbEnabled = buffer.ReadBool(); + this.autoSize = (AutoSizeType)buffer.ReadByte(); + tf.underline = buffer.ReadBool(); + tf.italic = buffer.ReadBool(); + tf.bold = buffer.ReadBool(); + this.singleLine = buffer.ReadBool(); + if (buffer.ReadBool()) + { + tf.outlineColor = buffer.ReadColor(); + tf.outline = buffer.ReadFloat(); + } + + if (buffer.ReadBool()) + { + tf.shadowColor = buffer.ReadColor(); + float f1 = buffer.ReadFloat(); + float f2 = buffer.ReadFloat(); + tf.shadowOffset = new Vector2(f1, f2); + } + + if (buffer.ReadBool()) + _templateVars = new Dictionary(); + + if (buffer.version >= 3) + { + tf.strikethrough = buffer.ReadBool(); +#if FAIRYGUI_TMPRO + tf.faceDilate = buffer.ReadFloat(); + tf.outlineSoftness = buffer.ReadFloat(); + tf.underlaySoftness = buffer.ReadFloat(); +#else + buffer.Skip(12); +#endif + } + + _textField.textFormat = tf; + } + + override public void Setup_AfterAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_AfterAdd(buffer, beginPos); + + buffer.Seek(beginPos, 6); + + string str = buffer.ReadS(); + if (str != null) + this.text = str; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs.meta new file mode 100644 index 0000000..50ff1e5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GTextField.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d64856957bd90d24aa05d134fb14e01d +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs new file mode 100644 index 0000000..d0b76b6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs @@ -0,0 +1,243 @@ +using System.Collections.Generic; +using FairyGUI.Utils; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class GTextInput : GTextField + { + /// + /// + /// + public InputTextField inputTextField { get; private set; } + + EventListener _onChanged; + EventListener _onSubmit; + + public GTextInput() + { + _textField.autoSize = AutoSizeType.None; + _textField.wordWrap = false; + } + + /// + /// + /// + public EventListener onChanged + { + get { return _onChanged ?? (_onChanged = new EventListener(this, "onChanged")); } + } + + /// + /// + /// + public EventListener onSubmit + { + get { return _onSubmit ?? (_onSubmit = new EventListener(this, "onSubmit")); } + } + + /// + /// + /// + public bool editable + { + get { return inputTextField.editable; } + set { inputTextField.editable = value; } + } + + /// + /// + /// + public bool hideInput + { + get { return inputTextField.hideInput; } + set { inputTextField.hideInput = value; } + } + + /// + /// + /// + public int maxLength + { + get { return inputTextField.maxLength; } + set { inputTextField.maxLength = value; } + } + + /// + /// + /// + public string restrict + { + get { return inputTextField.restrict; } + set { inputTextField.restrict = value; } + } + + /// + /// + /// + public bool displayAsPassword + { + get { return inputTextField.displayAsPassword; } + set { inputTextField.displayAsPassword = value; } + } + + /// + /// + /// + public int caretPosition + { + get { return inputTextField.caretPosition; } + set { inputTextField.caretPosition = value; } + } + + /// + /// + /// + public string promptText + { + get { return inputTextField.promptText; } + set { inputTextField.promptText = value; } + } + + /// + /// 在移动设备上是否使用键盘输入。如果false,则文本在获得焦点后不会弹出键盘。 + /// + public bool keyboardInput + { + get { return inputTextField.keyboardInput; } + set { inputTextField.keyboardInput = value; } + } + + /// + /// + /// + public int keyboardType + { + get { return inputTextField.keyboardType; } + set { inputTextField.keyboardType = value; } + } + + /// + /// + /// + public bool disableIME + { + get { return inputTextField.disableIME; } + set { inputTextField.disableIME = value; } + } + + /// + /// + /// + public Dictionary emojies + { + get { return inputTextField.emojies; } + set { inputTextField.emojies = value; } + } + + /// + /// + /// + public int border + { + get { return inputTextField.border; } + set { inputTextField.border = value; } + } + + /// + /// + /// + public int corner + { + get { return inputTextField.corner; } + set { inputTextField.corner = value; } + } + + /// + /// + /// + public Color borderColor + { + get { return inputTextField.borderColor; } + set { inputTextField.borderColor = value; } + } + + /// + /// + /// + public Color backgroundColor + { + get { return inputTextField.backgroundColor; } + set { inputTextField.backgroundColor = value; } + } + + /// + /// + /// + public bool mouseWheelEnabled + { + get { return inputTextField.mouseWheelEnabled; } + set { inputTextField.mouseWheelEnabled = value; } + } + + /// + /// + /// + /// + /// + public void SetSelection(int start, int length) + { + inputTextField.SetSelection(start, length); + } + + /// + /// + /// + /// + public void ReplaceSelection(string value) + { + inputTextField.ReplaceSelection(value); + } + + override protected void SetTextFieldText() + { + inputTextField.text = _text; + } + + override protected void CreateDisplayObject() + { + inputTextField = new InputTextField(); + inputTextField.gOwner = this; + displayObject = inputTextField; + + _textField = inputTextField.textField; + } + + public override void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 4); + + string str = buffer.ReadS(); + if (str != null) + inputTextField.promptText = str; + + str = buffer.ReadS(); + if (str != null) + inputTextField.restrict = str; + + int iv = buffer.ReadInt(); + if (iv != 0) + inputTextField.maxLength = iv; + iv = buffer.ReadInt(); + if (iv != 0) + inputTextField.keyboardType = iv; + if (buffer.ReadBool()) + inputTextField.displayAsPassword = true; + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs.meta new file mode 100644 index 0000000..4af9216 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GTextInput.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0e6f98107e4db9142b9de3358cf95378 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs new file mode 100644 index 0000000..de45629 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs @@ -0,0 +1,557 @@ +using System; +using System.Collections.Generic; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public class GTree : GList + { + public delegate void TreeNodeRenderDelegate(GTreeNode node, GComponent obj); + public delegate void TreeNodeWillExpandDelegate(GTreeNode node, bool expand); + + /// + /// 当TreeNode需要更新时回调 + /// + public TreeNodeRenderDelegate treeNodeRender; + + /// + /// 当TreeNode即将展开或者收缩时回调。可以在回调中动态增加子节点。 + /// + public TreeNodeWillExpandDelegate treeNodeWillExpand; + + int _indent; + GTreeNode _rootNode; + int _clickToExpand; + bool _expandedStatusInEvt; + + private static List helperIntList = new List(); + + /// + /// + /// + public GTree() + { + _indent = 30; + + _rootNode = new GTreeNode(true); + _rootNode._SetTree(this); + _rootNode.expanded = true; + + } + + /// + /// TreeView的顶层节点,这是个虚拟节点,也就是他不会显示出来。 + /// + public GTreeNode rootNode + { + get { return _rootNode; } + } + + /// + /// TreeView每级的缩进,单位像素。 + /// + public int indent + { + get { return _indent; } + set { _indent = value; } + } + + /// + /// + /// + public int clickToExpand + { + get { return _clickToExpand; } + set { _clickToExpand = value; } + } + + /// + /// + /// + /// + public GTreeNode GetSelectedNode() + { + int i = this.selectedIndex; + if (i != -1) + return (GTreeNode)this.GetChildAt(i)._treeNode; + else + return null; + } + + /// + /// + /// + /// + public List GetSelectedNodes() + { + return GetSelectedNodes(null); + } + + /// + /// + /// + /// + /// + public List GetSelectedNodes(List result) + { + if (result == null) + result = new List(); + helperIntList.Clear(); + List sels = GetSelection(helperIntList); + int cnt = sels.Count; + for (int i = 0; i < cnt; i++) + { + GTreeNode node = GetChildAt(sels[i])._treeNode; + result.Add(node); + } + return result; + } + /// + /// + /// + /// + public void SelectNode(GTreeNode node) + { + SelectNode(node, false); + } + + /// + /// + /// + /// + /// + public void SelectNode(GTreeNode node, bool scrollItToView) + { + GTreeNode parentNode = node.parent; + while (parentNode != null && parentNode != _rootNode) + { + parentNode.expanded = true; + parentNode = parentNode.parent; + } + AddSelection(GetChildIndex(node.cell), scrollItToView); + } + + /// + /// + /// + /// + public void UnselectNode(GTreeNode node) + { + RemoveSelection(GetChildIndex(node.cell)); + } + + /// + /// + /// + public void ExpandAll() + { + ExpandAll(_rootNode); + } + + /// + /// + /// + /// + public void ExpandAll(GTreeNode folderNode) + { + folderNode.expanded = true; + int cnt = folderNode.numChildren; + for (int i = 0; i < cnt; i++) + { + GTreeNode node = folderNode.GetChildAt(i); + if (node.isFolder) + ExpandAll(node); + } + } + + /// + /// + /// + /// + public void CollapseAll() + { + CollapseAll(_rootNode); + } + + /// + /// + /// + /// + public void CollapseAll(GTreeNode folderNode) + { + if (folderNode != _rootNode) + folderNode.expanded = false; + int cnt = folderNode.numChildren; + for (int i = 0; i < cnt; i++) + { + GTreeNode node = folderNode.GetChildAt(i); + if (node.isFolder) + CollapseAll(node); + } + } + + /// + /// + /// + /// + void CreateCell(GTreeNode node) + { + GComponent child = itemPool.GetObject(string.IsNullOrEmpty(node._resURL) ? this.defaultItem : node._resURL) as GComponent; + if (child == null) + throw new Exception("FairyGUI: cannot create tree node object."); + child.displayObject.home = this.displayObject.cachedTransform; + child._treeNode = node; + node._cell = child; + + GObject indentObj = node.cell.GetChild("indent"); + if (indentObj != null) + indentObj.width = (node.level - 1) * indent; + + Controller cc; + + cc = child.GetController("expanded"); + if (cc != null) + { + cc.onChanged.Add(__expandedStateChanged); + cc.selectedIndex = node.expanded ? 1 : 0; + } + + cc = child.GetController("leaf"); + if (cc != null) + cc.selectedIndex = node.isFolder ? 0 : 1; + + if (node.isFolder) + child.onTouchBegin.Add(__cellTouchBegin); + + if (treeNodeRender != null) + treeNodeRender(node, node._cell); + } + + /// + /// + /// + /// + internal void _AfterInserted(GTreeNode node) + { + if (node._cell == null) + CreateCell(node); + + int index = GetInsertIndexForNode(node); + AddChildAt(node.cell, index); + if (treeNodeRender != null) + treeNodeRender(node, node._cell); + + if (node.isFolder && node.expanded) + CheckChildren(node, index); + } + + /// + /// + /// + /// + /// + int GetInsertIndexForNode(GTreeNode node) + { + GTreeNode prevNode = node.GetPrevSibling(); + if (prevNode == null) + prevNode = node.parent; + int insertIndex = GetChildIndex(prevNode.cell) + 1; + int myLevel = node.level; + int cnt = this.numChildren; + for (int i = insertIndex; i < cnt; i++) + { + GTreeNode testNode = GetChildAt(i)._treeNode; + if (testNode.level <= myLevel) + break; + + insertIndex++; + } + + return insertIndex; + } + + /// + /// + /// + /// + internal void _AfterRemoved(GTreeNode node) + { + RemoveNode(node); + } + + /// + /// + /// + /// + internal void _AfterExpanded(GTreeNode node) + { + if (node == _rootNode) + { + CheckChildren(_rootNode, 0); + return; + } + + if (this.treeNodeWillExpand != null) + this.treeNodeWillExpand(node, true); + + if (node._cell == null) + return; + + if (this.treeNodeRender != null) + this.treeNodeRender(node, node._cell); + + Controller cc = node._cell.GetController("expanded"); + if (cc != null) + cc.selectedIndex = 1; + + if (node._cell.parent != null) + CheckChildren(node, GetChildIndex(node._cell)); + } + + /// + /// + /// + /// + internal void _AfterCollapsed(GTreeNode node) + { + if (node == _rootNode) + { + CheckChildren(_rootNode, 0); + return; + } + + if (this.treeNodeWillExpand != null) + this.treeNodeWillExpand(node, false); + + if (node._cell == null) + return; + + if (this.treeNodeRender != null) + this.treeNodeRender(node, node._cell); + + Controller cc = node._cell.GetController("expanded"); + if (cc != null) + cc.selectedIndex = 0; + + if (node._cell.parent != null) + HideFolderNode(node); + } + + /// + /// + /// + /// + internal void _AfterMoved(GTreeNode node) + { + int startIndex = GetChildIndex(node._cell); + int endIndex; + if (node.isFolder) + endIndex = GetFolderEndIndex(startIndex, node.level); + else + endIndex = startIndex + 1; + int insertIndex = GetInsertIndexForNode(node); + int cnt = endIndex - startIndex; + + if (insertIndex < startIndex) + { + for (int i = 0; i < cnt; i++) + { + GObject obj = GetChildAt(startIndex + i); + SetChildIndex(obj, insertIndex + i); + } + } + else + { + for (int i = 0; i < cnt; i++) + { + GObject obj = GetChildAt(startIndex); + SetChildIndex(obj, insertIndex); + } + } + } + + private int GetFolderEndIndex(int startIndex, int level) + { + int cnt = this.numChildren; + for (int i = startIndex + 1; i < cnt; i++) + { + GTreeNode node = GetChildAt(i)._treeNode; + if (node.level <= level) + return i; + } + + return cnt; + } + + /// + /// + /// + /// + /// + /// + int CheckChildren(GTreeNode folderNode, int index) + { + int cnt = folderNode.numChildren; + for (int i = 0; i < cnt; i++) + { + index++; + GTreeNode node = folderNode.GetChildAt(i); + if (node.cell == null) + CreateCell(node); + + if (node.cell.parent == null) + AddChildAt(node.cell, index); + + if (node.isFolder && node.expanded) + index = CheckChildren(node, index); + } + + return index; + } + + /// + /// + /// + /// + void HideFolderNode(GTreeNode folderNode) + { + int cnt = folderNode.numChildren; + for (int i = 0; i < cnt; i++) + { + GTreeNode node = folderNode.GetChildAt(i); + if (node.cell != null && node.cell.parent != null) + RemoveChild(node.cell); + + if (node.isFolder && node.expanded) + HideFolderNode(node); + } + } + + /// + /// + /// + /// + void RemoveNode(GTreeNode node) + { + if (node.cell != null) + { + if (node.cell.parent != null) + RemoveChild(node.cell); + itemPool.ReturnObject(node.cell); + node._cell._treeNode = null; + node._cell = null; + } + + if (node.isFolder) + { + int cnt = node.numChildren; + for (int i = 0; i < cnt; i++) + { + GTreeNode node2 = node.GetChildAt(i); + RemoveNode(node2); + } + } + } + + void __cellTouchBegin(EventContext context) + { + GTreeNode node = ((GObject)context.sender)._treeNode; + _expandedStatusInEvt = node.expanded; + } + + void __expandedStateChanged(EventContext context) + { + Controller cc = (Controller)context.sender; + GTreeNode node = cc.parent._treeNode; + node.expanded = cc.selectedIndex == 1; + } + + override protected void DispatchItemEvent(GObject item, EventContext context) + { + if (_clickToExpand != 0) + { + GTreeNode node = item._treeNode; + if (node != null && _expandedStatusInEvt == node.expanded) + { + if (_clickToExpand == 2) + { + if (context.inputEvent.isDoubleClick) + node.expanded = !node.expanded; + } + else + node.expanded = !node.expanded; + } + } + + base.DispatchItemEvent(item, context); + } + + override public void Setup_BeforeAdd(ByteBuffer buffer, int beginPos) + { + base.Setup_BeforeAdd(buffer, beginPos); + + buffer.Seek(beginPos, 9); + + _indent = buffer.ReadInt(); + _clickToExpand = buffer.ReadByte(); + } + + override protected void ReadItems(ByteBuffer buffer) + { + int nextPos; + string str; + bool isFolder; + GTreeNode lastNode = null; + int level; + int prevLevel = 0; + + int cnt = buffer.ReadShort(); + for (int i = 0; i < cnt; i++) + { + nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + str = buffer.ReadS(); + if (str == null) + { + str = this.defaultItem; + if (str == null) + { + buffer.position = nextPos; + continue; + } + } + + isFolder = buffer.ReadBool(); + level = buffer.ReadByte(); + + GTreeNode node = new GTreeNode(isFolder, str); + node.expanded = true; + if (i == 0) + _rootNode.AddChild(node); + else + { + if (level > prevLevel) + lastNode.AddChild(node); + else if (level < prevLevel) + { + for (int j = level; j <= prevLevel; j++) + lastNode = lastNode.parent; + lastNode.AddChild(node); + } + else + lastNode.parent.AddChild(node); + } + lastNode = node; + prevLevel = level; + + SetupItem(buffer, node.cell); + + buffer.position = nextPos; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs.meta new file mode 100644 index 0000000..f3872c9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GTree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2d05bd744ca041a8beb8cfd9421d8a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs b/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs new file mode 100644 index 0000000..3ac04eb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs @@ -0,0 +1,406 @@ +using System; +using System.Collections.Generic; + +namespace FairyGUI +{ + /// + /// + /// + public class GTreeNode + { + /// + /// + /// + public object data; + + /// + /// + /// + public GTreeNode parent { get; private set; } + + /// + /// + /// + public GTree tree { get; private set; } + + List _children; + bool _expanded; + int _level; + internal GComponent _cell; + internal string _resURL; + + /// + /// + /// + /// + public GTreeNode(bool hasChild) : this(hasChild, null) + { + + } + + /// + /// + /// + /// + /// + public GTreeNode(bool hasChild, string resURL) + { + if (hasChild) + _children = new List(); + _resURL = resURL; + } + + /// + /// + /// + public GComponent cell + { + get { return _cell; } + } + + /// + /// + /// + public int level + { + get { return _level; } + } + + /// + /// + /// + public bool expanded + { + get + { + return _expanded; + } + + set + { + if (_children == null) + return; + + if (_expanded != value) + { + _expanded = value; + if (tree != null) + { + if (_expanded) + tree._AfterExpanded(this); + else + tree._AfterCollapsed(this); + } + } + } + } + + /// + /// + /// + public void ExpandToRoot() + { + GTreeNode p = this; + while (p != null) + { + p.expanded = true; + p = p.parent; + } + } + + /// + /// + /// + public bool isFolder + { + get { return _children != null; } + } + + /// + /// + /// + public string text + { + get + { + if (_cell != null) + return _cell.text; + else + return null; + } + + set + { + if (_cell != null) + _cell.text = value; + } + } + + /// + /// + /// + public string icon + { + get + { + if (_cell != null) + return _cell.icon; + else + return null; + } + + set + { + if (_cell != null) + _cell.icon = value; + } + } + + /// + /// + /// + /// + /// + public GTreeNode AddChild(GTreeNode child) + { + AddChildAt(child, _children.Count); + return child; + } + + /// + /// + /// + /// + /// + /// + public GTreeNode AddChildAt(GTreeNode child, int index) + { + if (child == null) + throw new Exception("child is null"); + + int numChildren = _children.Count; + + if (index >= 0 && index <= numChildren) + { + if (child.parent == this) + { + SetChildIndex(child, index); + } + else + { + if (child.parent != null) + child.parent.RemoveChild(child); + + int cnt = _children.Count; + if (index == cnt) + _children.Add(child); + else + _children.Insert(index, child); + + child.parent = this; + child._level = _level + 1; + child._SetTree(this.tree); + if (tree != null && this == tree.rootNode || _cell != null && _cell.parent != null && _expanded) + tree._AfterInserted(child); + } + + return child; + } + else + { + throw new Exception("Invalid child index"); + } + } + + /// + /// + /// + /// + /// + public GTreeNode RemoveChild(GTreeNode child) + { + int childIndex = _children.IndexOf(child); + if (childIndex != -1) + { + RemoveChildAt(childIndex); + } + return child; + } + + /// + /// + /// + /// + /// + public GTreeNode RemoveChildAt(int index) + { + if (index >= 0 && index < numChildren) + { + GTreeNode child = _children[index]; + _children.RemoveAt(index); + + child.parent = null; + if (tree != null) + { + child._SetTree(null); + tree._AfterRemoved(child); + } + + return child; + } + else + { + throw new Exception("Invalid child index"); + } + } + + /// + /// + /// + /// + /// + public void RemoveChildren(int beginIndex = 0, int endIndex = -1) + { + if (endIndex < 0 || endIndex >= numChildren) + endIndex = numChildren - 1; + + for (int i = beginIndex; i <= endIndex; ++i) + RemoveChildAt(beginIndex); + } + + /// + /// + /// + /// + /// + public GTreeNode GetChildAt(int index) + { + if (index >= 0 && index < numChildren) + return _children[index]; + else + throw new Exception("Invalid child index"); + } + + /// + /// + /// + /// + /// + public int GetChildIndex(GTreeNode child) + { + return _children.IndexOf(child); + } + + /// + /// + /// + /// + public GTreeNode GetPrevSibling() + { + if (parent == null) + return null; + + int i = parent._children.IndexOf(this); + if (i <= 0) + return null; + + return parent._children[i - 1]; + } + + /// + /// + /// + /// + public GTreeNode GetNextSibling() + { + if (parent == null) + return null; + + int i = parent._children.IndexOf(this); + if (i < 0 || i >= parent._children.Count - 1) + return null; + + return parent._children[i + 1]; + } + + /// + /// + /// + /// + /// + public void SetChildIndex(GTreeNode child, int index) + { + int oldIndex = _children.IndexOf(child); + if (oldIndex == -1) + throw new Exception("Not a child of this container"); + + int cnt = _children.Count; + if (index < 0) + index = 0; + else if (index > cnt) + index = cnt; + + if (oldIndex == index) + return; + + _children.RemoveAt(oldIndex); + _children.Insert(index, child); + if (tree != null && this == tree.rootNode || _cell != null && _cell.parent != null && _expanded) + tree._AfterMoved(child); + } + + /// + /// + /// + /// + /// + public void SwapChildren(GTreeNode child1, GTreeNode child2) + { + int index1 = _children.IndexOf(child1); + int index2 = _children.IndexOf(child2); + if (index1 == -1 || index2 == -1) + throw new Exception("Not a child of this container"); + SwapChildrenAt(index1, index2); + } + + /// + /// + /// + /// + /// + public void SwapChildrenAt(int index1, int index2) + { + GTreeNode child1 = _children[index1]; + GTreeNode child2 = _children[index2]; + + SetChildIndex(child1, index2); + SetChildIndex(child2, index1); + } + + /// + /// + /// + public int numChildren + { + get { return (null == _children) ? 0 : _children.Count; } + } + + internal void _SetTree(GTree value) + { + tree = value; + if (tree != null && tree.treeNodeWillExpand != null && _expanded) + tree.treeNodeWillExpand(this, true); + + if (_children != null) + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + GTreeNode node = _children[i]; + node._level = _level + 1; + node._SetTree(value); + } + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs.meta new file mode 100644 index 0000000..f074700 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/GTreeNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0507f7de6e0d34b85853b6a2f591aaf9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears.meta new file mode 100644 index 0000000..89715db --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b22c996c870881c438177e27f3450ac7 +folderAsset: yes +timeCreated: 1476166202 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs new file mode 100644 index 0000000..3638afc --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs @@ -0,0 +1,109 @@ +using System.Collections.Generic; +using FairyGUI.Utils; + +namespace FairyGUI +{ + class GearAnimationValue + { + public bool playing; + public int frame; + public string animationName; + public string skinName; + + public GearAnimationValue(bool playing, int frame) + { + this.playing = playing; + this.frame = frame; + } + } + + /// + /// Gear is a connection between object and controller. + /// + public class GearAnimation : GearBase + { + Dictionary _storage; + GearAnimationValue _default; + + public GearAnimation(GObject owner) + : base(owner) + { + } + + protected override void Init() + { + _default = new GearAnimationValue(((IAnimationGear)_owner).playing, ((IAnimationGear)_owner).frame); + if (_owner is GLoader3D) + { + _default.animationName = ((GLoader3D)_owner).animationName; + _default.skinName = ((GLoader3D)_owner).skinName; + } + _storage = new Dictionary(); + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + GearAnimationValue gv; + if (pageId == null) + gv = _default; + else + { + gv = new GearAnimationValue(false, 0); + _storage[pageId] = gv; + } + + gv.playing = buffer.ReadBool(); + gv.frame = buffer.ReadInt(); + } + + public void AddExtStatus(string pageId, ByteBuffer buffer) + { + GearAnimationValue gv; + if (pageId == null) + gv = _default; + else + gv = _storage[pageId]; + gv.animationName = buffer.ReadS(); + gv.skinName = buffer.ReadS(); + } + + override public void Apply() + { + _owner._gearLocked = true; + + GearAnimationValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + gv = _default; + + IAnimationGear mc = (IAnimationGear)_owner; + mc.frame = gv.frame; + mc.playing = gv.playing; + if (_owner is GLoader3D) + { + ((GLoader3D)_owner).animationName = gv.animationName; + ((GLoader3D)_owner).skinName = gv.skinName; + } + + _owner._gearLocked = false; + } + + override public void UpdateState() + { + IAnimationGear mc = (IAnimationGear)_owner; + GearAnimationValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + _storage[_controller.selectedPageId] = gv = new GearAnimationValue(mc.playing, mc.frame); + else + { + gv.playing = mc.playing; + gv.frame = mc.frame; + } + + if (_owner is GLoader3D) + { + gv.animationName = ((GLoader3D)_owner).animationName; + gv.skinName = ((GLoader3D)_owner).skinName; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs.meta new file mode 100644 index 0000000..a642fee --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearAnimation.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 87e99c1910ca9684d8719dae7bdb7658 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs new file mode 100644 index 0000000..6d05ef7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs @@ -0,0 +1,203 @@ +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// Gear is a connection between object and controller. + /// + abstract public class GearBase + { + public static bool disableAllTweenEffect = false; + + protected GObject _owner; + protected Controller _controller; + protected GearTweenConfig _tweenConfig; + + public GearBase(GObject owner) + { + _owner = owner; + } + + public void Dispose() + { + if (_tweenConfig != null && _tweenConfig._tweener != null) + { + _tweenConfig._tweener.Kill(); + _tweenConfig._tweener = null; + } + } + + /// + /// Controller object. + /// + public Controller controller + { + get + { + return _controller; + } + + set + { + if (value != _controller) + { + _controller = value; + if (_controller != null) + Init(); + } + } + } + + public GearTweenConfig tweenConfig + { + get + { + if (_tweenConfig == null) + _tweenConfig = new GearTweenConfig(); + return _tweenConfig; + } + } + + public void Setup(ByteBuffer buffer) + { + _controller = _owner.parent.GetControllerAt(buffer.ReadShort()); + Init(); + + int cnt = buffer.ReadShort(); + if (this is GearDisplay) + { + ((GearDisplay)this).pages = buffer.ReadSArray(cnt); + } + else if (this is GearDisplay2) + { + ((GearDisplay2)this).pages = buffer.ReadSArray(cnt); + } + else + { + for (int i = 0; i < cnt; i++) + { + string page = buffer.ReadS(); + if (page == null) + continue; + + AddStatus(page, buffer); + } + + if (buffer.ReadBool()) + AddStatus(null, buffer); + } + + if (buffer.ReadBool()) + { + _tweenConfig = new GearTweenConfig(); + _tweenConfig.easeType = (EaseType)buffer.ReadByte(); + _tweenConfig.duration = buffer.ReadFloat(); + _tweenConfig.delay = buffer.ReadFloat(); + } + + if (buffer.version >= 2) + { + if (this is GearXY) + { + if (buffer.ReadBool()) + { + ((GearXY)this).positionsInPercent = true; + for (int i = 0; i < cnt; i++) + { + string page = buffer.ReadS(); + if (page == null) + continue; + + ((GearXY)this).AddExtStatus(page, buffer); + } + + if (buffer.ReadBool()) + ((GearXY)this).AddExtStatus(null, buffer); + } + } + else if (this is GearDisplay2) + ((GearDisplay2)this).condition = buffer.ReadByte(); + } + + if (buffer.version >= 4 && _tweenConfig != null && _tweenConfig.easeType == EaseType.Custom) + { + _tweenConfig.customEase = new CustomEase(); + _tweenConfig.customEase.Create(buffer.ReadPath()); + } + + if (buffer.version >= 6) + { + if (this is GearAnimation) + { + for (int i = 0; i < cnt; i++) + { + string page = buffer.ReadS(); + if (page == null) + continue; + + ((GearAnimation)this).AddExtStatus(page, buffer); + } + + if (buffer.ReadBool()) + ((GearAnimation)this).AddExtStatus(null, buffer); + } + } + } + + virtual public void UpdateFromRelations(float dx, float dy) + { + } + + abstract protected void AddStatus(string pageId, ByteBuffer buffer); + abstract protected void Init(); + + /// + /// Call when controller active page changed. + /// + abstract public void Apply(); + + /// + /// Call when object's properties changed. + /// + abstract public void UpdateState(); + } + + public class GearTweenConfig + { + /// + /// Use tween to apply change. + /// + public bool tween; + + /// + /// Ease type. + /// + public EaseType easeType; + + /// + /// + /// + public CustomEase customEase; + + /// + /// Tween duration in seconds. + /// + public float duration; + + /// + /// Tween delay in seconds. + /// + public float delay; + + internal uint _displayLockToken; + internal GTweener _tweener; + + public GearTweenConfig() + { + tween = true; + easeType = EaseType.QuadOut; + duration = 0.3f; + delay = 0; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs.meta new file mode 100644 index 0000000..6c52607 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearBase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2050e67af29d06a44834f7ffbfe14e83 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs new file mode 100644 index 0000000..0e07b85 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs @@ -0,0 +1,142 @@ +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + class GearColorValue + { + public Color color; + public Color strokeColor; + + public GearColorValue() + { + } + + public GearColorValue(Color color, Color strokeColor) + { + this.color = color; + this.strokeColor = strokeColor; + } + } + + /// + /// Gear is a connection between object and controller. + /// + public class GearColor : GearBase, ITweenListener + { + Dictionary _storage; + GearColorValue _default; + + public GearColor(GObject owner) + : base(owner) + { + } + + protected override void Init() + { + _default = new GearColorValue(); + _default.color = ((IColorGear)_owner).color; + if (_owner is ITextColorGear) + _default.strokeColor = ((ITextColorGear)_owner).strokeColor; + _storage = new Dictionary(); + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + GearColorValue gv; + if (pageId == null) + gv = _default; + else + { + gv = new GearColorValue(Color.black, Color.black); + _storage[pageId] = gv; + } + + gv.color = buffer.ReadColor(); + gv.strokeColor = buffer.ReadColor(); + } + + override public void Apply() + { + GearColorValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + gv = _default; + + if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect) + { + if ((_owner is ITextColorGear) && gv.strokeColor.a > 0) + { + _owner._gearLocked = true; + ((ITextColorGear)_owner).strokeColor = gv.strokeColor; + _owner._gearLocked = false; + } + + if (_tweenConfig._tweener != null) + { + if (_tweenConfig._tweener.endValue.color != gv.color) + { + _tweenConfig._tweener.Kill(true); + _tweenConfig._tweener = null; + } + else + return; + } + + if (((IColorGear)_owner).color != gv.color) + { + if (_owner.CheckGearController(0, _controller)) + _tweenConfig._displayLockToken = _owner.AddDisplayLock(); + + _tweenConfig._tweener = GTween.To(((IColorGear)_owner).color, gv.color, _tweenConfig.duration) + .SetDelay(_tweenConfig.delay) + .SetEase(_tweenConfig.easeType, _tweenConfig.customEase) + .SetTarget(this) + .SetListener(this); + } + } + else + { + _owner._gearLocked = true; + ((IColorGear)_owner).color = gv.color; + if ((_owner is ITextColorGear) && gv.strokeColor.a > 0) + ((ITextColorGear)_owner).strokeColor = gv.strokeColor; + _owner._gearLocked = false; + } + } + + public void OnTweenStart(GTweener tweener) + { + } + + public void OnTweenUpdate(GTweener tweener) + { + _owner._gearLocked = true; + ((IColorGear)_owner).color = tweener.value.color; + _owner._gearLocked = false; + + _owner.InvalidateBatchingState(); + } + + public void OnTweenComplete(GTweener tweener) + { + _tweenConfig._tweener = null; + if (_tweenConfig._displayLockToken != 0) + { + _owner.ReleaseDisplayLock(_tweenConfig._displayLockToken); + _tweenConfig._displayLockToken = 0; + } + _owner.DispatchEvent("onGearStop", this); + } + + override public void UpdateState() + { + GearColorValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + _storage[_controller.selectedPageId] = gv = new GearColorValue(); + gv.color = ((IColorGear)_owner).color; + if (_owner is ITextColorGear) + gv.strokeColor = ((ITextColorGear)_owner).strokeColor; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs.meta new file mode 100644 index 0000000..31a20e4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearColor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a4878a5e9a94c1d429c827f93ca3072b +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs new file mode 100644 index 0000000..c8c2e8a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs @@ -0,0 +1,68 @@ +using System; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// Gear is a connection between object and controller. + /// + public class GearDisplay : GearBase + { + /// + /// Pages involed in this gear. + /// + public string[] pages { get; set; } + + int _visible; + uint _displayLockToken; + + public GearDisplay(GObject owner) + : base(owner) + { + _displayLockToken = 1; + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + } + + override protected void Init() + { + pages = null; + } + + override public void Apply() + { + _displayLockToken++; + if (_displayLockToken == 0) + _displayLockToken = 1; + + if (pages == null || pages.Length == 0 + || Array.IndexOf(pages, _controller.selectedPageId) != -1) + _visible = 1; + else + _visible = 0; + } + + override public void UpdateState() + { + } + + public uint AddLock() + { + _visible++; + return _displayLockToken; + } + + public void ReleaseLock(uint token) + { + if (token == _displayLockToken) + _visible--; + } + + public bool connected + { + get { return _controller == null || _visible > 0; } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs.meta new file mode 100644 index 0000000..7c3c0ed --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f88c3ac62122e7141a5d6c41eb11da27 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs new file mode 100644 index 0000000..8e812d0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs @@ -0,0 +1,55 @@ +using System; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// Gear is a connection between object and controller. + /// + public class GearDisplay2 : GearBase + { + /// + /// Pages involed in this gear. + /// + public string[] pages { get; set; } + public int condition; + + int _visible; + + public GearDisplay2(GObject owner) + : base(owner) + { + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + } + + override protected void Init() + { + pages = null; + } + + override public void Apply() + { + if (pages == null || pages.Length == 0 + || Array.IndexOf(pages, _controller.selectedPageId) != -1) + _visible = 1; + else + _visible = 0; + } + + override public void UpdateState() + { + } + public bool Evaluate(bool connected) + { + bool v = _controller == null || _visible > 0; + if (this.condition == 0) + v = v && connected; + else + v = v || connected; + return v; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs.meta new file mode 100644 index 0000000..a0dbf5e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearDisplay2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96390d060150348e98dfe41bf7d23f5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs new file mode 100644 index 0000000..3d3965c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs @@ -0,0 +1,65 @@ +using System.Collections.Generic; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// Gear is a connection between object and controller. + /// + public class GearFontSize : GearBase + { + Dictionary _storage; + int _default; + GTextField _textField; + + public GearFontSize(GObject owner) + : base(owner) + { + } + + protected override void Init() + { + if (_owner is GLabel) + _textField = ((GLabel)_owner).GetTextField(); + else if (_owner is GButton) + _textField = ((GButton)_owner).GetTextField(); + else + _textField = (GTextField)_owner; + + _default = _textField.textFormat.size; + _storage = new Dictionary(); + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + if (pageId == null) + _default = buffer.ReadInt(); + else + _storage[pageId] = buffer.ReadInt(); + } + + override public void Apply() + { + if (_textField == null) + return; + + _owner._gearLocked = true; + + int cv; + if (!_storage.TryGetValue(_controller.selectedPageId, out cv)) + cv = _default; + + TextFormat tf = _textField.textFormat; + tf.size = cv; + _textField.textFormat = tf; + + _owner._gearLocked = false; + } + + override public void UpdateState() + { + if (_textField != null) + _storage[_controller.selectedPageId] = _textField.textFormat.size; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs.meta new file mode 100644 index 0000000..e1ee194 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearFontSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d3a7b66a83334b44bb8630ecc980a59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs new file mode 100644 index 0000000..be04750 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// Gear is a connection between object and controller. + /// + public class GearIcon : GearBase + { + Dictionary _storage; + string _default; + + public GearIcon(GObject owner) + : base(owner) + { + } + + protected override void Init() + { + _default = _owner.icon; + _storage = new Dictionary(); + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + if (pageId == null) + _default = buffer.ReadS(); + else + _storage[pageId] = buffer.ReadS(); + } + + override public void Apply() + { + _owner._gearLocked = true; + + string cv; + if (!_storage.TryGetValue(_controller.selectedPageId, out cv)) + cv = _default; + + _owner.icon = cv; + + _owner._gearLocked = false; + } + + override public void UpdateState() + { + _storage[_controller.selectedPageId] = _owner.icon; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs.meta new file mode 100644 index 0000000..d8a61b1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearIcon.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 27b2a638ddb815f40994e0477c3ea4c0 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs new file mode 100644 index 0000000..20c7520 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs @@ -0,0 +1,152 @@ +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + class GearLookValue + { + public float alpha; + public float rotation; + public bool grayed; + public bool touchable; + + public GearLookValue(float alpha, float rotation, bool grayed, bool touchable) + { + this.alpha = alpha; + this.rotation = rotation; + this.grayed = grayed; + this.touchable = touchable; + } + } + + /// + /// Gear is a connection between object and controller. + /// + public class GearLook : GearBase, ITweenListener + { + Dictionary _storage; + GearLookValue _default; + + public GearLook(GObject owner) + : base(owner) + { + } + + protected override void Init() + { + _default = new GearLookValue(_owner.alpha, _owner.rotation, _owner.grayed, _owner.touchable); + _storage = new Dictionary(); + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + GearLookValue gv; + if (pageId == null) + gv = _default; + else + { + gv = new GearLookValue(0, 0, false, false); + _storage[pageId] = gv; + } + + gv.alpha = buffer.ReadFloat(); + gv.rotation = buffer.ReadFloat(); + gv.grayed = buffer.ReadBool(); + gv.touchable = buffer.ReadBool(); + } + + override public void Apply() + { + GearLookValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + gv = _default; + + if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect) + { + _owner._gearLocked = true; + _owner.grayed = gv.grayed; + _owner.touchable = gv.touchable; + _owner._gearLocked = false; + + if (_tweenConfig._tweener != null) + { + if (_tweenConfig._tweener.endValue.x != gv.alpha || _tweenConfig._tweener.endValue.y != gv.rotation) + { + _tweenConfig._tweener.Kill(true); + _tweenConfig._tweener = null; + } + else + return; + } + + bool a = gv.alpha != _owner.alpha; + bool b = gv.rotation != _owner.rotation; + if (a || b) + { + if (_owner.CheckGearController(0, _controller)) + _tweenConfig._displayLockToken = _owner.AddDisplayLock(); + + _tweenConfig._tweener = GTween.To(new Vector2(_owner.alpha, _owner.rotation), new Vector2(gv.alpha, gv.rotation), _tweenConfig.duration) + .SetDelay(_tweenConfig.delay) + .SetEase(_tweenConfig.easeType, _tweenConfig.customEase) + .SetUserData((a ? 1 : 0) + (b ? 2 : 0)) + .SetTarget(this) + .SetListener(this); + } + } + else + { + _owner._gearLocked = true; + _owner.alpha = gv.alpha; + _owner.rotation = gv.rotation; + _owner.grayed = gv.grayed; + _owner.touchable = gv.touchable; + _owner._gearLocked = false; + } + } + + public void OnTweenStart(GTweener tweener) + { + } + + public void OnTweenUpdate(GTweener tweener) + { + int flag = (int)tweener.userData; + _owner._gearLocked = true; + if ((flag & 1) != 0) + _owner.alpha = tweener.value.x; + if ((flag & 2) != 0) + { + _owner.rotation = tweener.value.y; + _owner.InvalidateBatchingState(); + } + _owner._gearLocked = false; + } + + public void OnTweenComplete(GTweener tweener) + { + _tweenConfig._tweener = null; + if (_tweenConfig._displayLockToken != 0) + { + _owner.ReleaseDisplayLock(_tweenConfig._displayLockToken); + _tweenConfig._displayLockToken = 0; + } + _owner.DispatchEvent("onGearStop", this); + } + + override public void UpdateState() + { + GearLookValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + _storage[_controller.selectedPageId] = new GearLookValue(_owner.alpha, _owner.rotation, _owner.grayed, _owner.touchable); + else + { + gv.alpha = _owner.alpha; + gv.rotation = _owner.rotation; + gv.grayed = _owner.grayed; + gv.touchable = _owner.touchable; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs.meta new file mode 100644 index 0000000..0e4017e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearLook.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 77704143cdb38714196c9ff520a079f8 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs new file mode 100644 index 0000000..e949097 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs @@ -0,0 +1,163 @@ +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + class GearSizeValue + { + public float width; + public float height; + public float scaleX; + public float scaleY; + + public GearSizeValue(float width, float height, float scaleX, float scaleY) + { + this.width = width; + this.height = height; + this.scaleX = scaleX; + this.scaleY = scaleY; + } + } + + /// + /// Gear is a connection between object and controller. + /// + public class GearSize : GearBase, ITweenListener + { + Dictionary _storage; + GearSizeValue _default; + + public GearSize(GObject owner) + : base(owner) + { + + } + + protected override void Init() + { + _default = new GearSizeValue(_owner.width, _owner.height, _owner.scaleX, _owner.scaleY); + _storage = new Dictionary(); + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + GearSizeValue gv; + if (pageId == null) + gv = _default; + else + { + gv = new GearSizeValue(0, 0, 1, 1); + _storage[pageId] = gv; + } + + gv.width = buffer.ReadInt(); + gv.height = buffer.ReadInt(); + gv.scaleX = buffer.ReadFloat(); + gv.scaleY = buffer.ReadFloat(); + } + + override public void Apply() + { + GearSizeValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + gv = _default; + + if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect) + { + if (_tweenConfig._tweener != null) + { + if (_tweenConfig._tweener.endValue.x != gv.width || _tweenConfig._tweener.endValue.y != gv.height + || _tweenConfig._tweener.endValue.z != gv.scaleX || _tweenConfig._tweener.endValue.w != gv.scaleY) + { + _tweenConfig._tweener.Kill(true); + _tweenConfig._tweener = null; + } + else + return; + } + + bool a = gv.width != _owner.width || gv.height != _owner.height; + bool b = gv.scaleX != _owner.scaleX || gv.scaleY != _owner.scaleY; + if (a || b) + { + if (_owner.CheckGearController(0, _controller)) + _tweenConfig._displayLockToken = _owner.AddDisplayLock(); + + _tweenConfig._tweener = GTween.To(new Vector4(_owner.width, _owner.height, _owner.scaleX, _owner.scaleY), + new Vector4(gv.width, gv.height, gv.scaleX, gv.scaleY), _tweenConfig.duration) + .SetDelay(_tweenConfig.delay) + .SetEase(_tweenConfig.easeType, _tweenConfig.customEase) + .SetUserData((a ? 1 : 0) + (b ? 2 : 0)) + .SetTarget(this) + .SetListener(this); + } + } + else + { + _owner._gearLocked = true; + _owner.SetSize(gv.width, gv.height, _owner.CheckGearController(1, _controller)); + _owner.SetScale(gv.scaleX, gv.scaleY); + _owner._gearLocked = false; + } + } + + public void OnTweenStart(GTweener tweener) + { + } + + public void OnTweenUpdate(GTweener tweener) + { + _owner._gearLocked = true; + int flag = (int)tweener.userData; + if ((flag & 1) != 0) + _owner.SetSize(tweener.value.x, tweener.value.y, _owner.CheckGearController(1, _controller)); + if ((flag & 2) != 0) + _owner.SetScale(tweener.value.z, tweener.value.w); + _owner._gearLocked = false; + + _owner.InvalidateBatchingState(); + } + + public void OnTweenComplete(GTweener tweener) + { + _tweenConfig._tweener = null; + if (_tweenConfig._displayLockToken != 0) + { + _owner.ReleaseDisplayLock(_tweenConfig._displayLockToken); + _tweenConfig._displayLockToken = 0; + } + _owner.DispatchEvent("onGearStop", this); + } + + override public void UpdateState() + { + GearSizeValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + _storage[_controller.selectedPageId] = new GearSizeValue(_owner.width, _owner.height, _owner.scaleX, _owner.scaleY); + else + { + gv.width = _owner.width; + gv.height = _owner.height; + gv.scaleX = _owner.scaleX; + gv.scaleY = _owner.scaleY; + } + } + + override public void UpdateFromRelations(float dx, float dy) + { + if (_controller != null && _storage != null) + { + foreach (GearSizeValue gv in _storage.Values) + { + gv.width += dx; + gv.height += dy; + } + _default.width += dx; + _default.height += dy; + + UpdateState(); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs.meta new file mode 100644 index 0000000..d20510e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearSize.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 254f71ab913968a4e853a99ce79f0266 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs new file mode 100644 index 0000000..7cef440 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// Gear is a connection between object and controller. + /// + public class GearText : GearBase + { + Dictionary _storage; + string _default; + + public GearText(GObject owner) + : base(owner) + { + } + + protected override void Init() + { + _default = _owner.text; + _storage = new Dictionary(); + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + if (pageId == null) + _default = buffer.ReadS(); + else + _storage[pageId] = buffer.ReadS(); + } + + override public void Apply() + { + _owner._gearLocked = true; + + string cv; + if (!_storage.TryGetValue(_controller.selectedPageId, out cv)) + cv = _default; + + _owner.text = cv; + + _owner._gearLocked = false; + } + + override public void UpdateState() + { + _storage[_controller.selectedPageId] = _owner.text; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs.meta new file mode 100644 index 0000000..2dbe1dd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearText.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d8b20f3a5dd39ec42bed3456334916fc +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs new file mode 100644 index 0000000..ed48c78 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs @@ -0,0 +1,177 @@ +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + class GearXYValue + { + public float x; + public float y; + public float px; + public float py; + + public GearXYValue(float x = 0, float y = 0, float px = 0, float py = 0) + { + this.x = x; + this.y = y; + this.px = px; + this.py = py; + } + } + + /// + /// Gear is a connection between object and controller. + /// + public class GearXY : GearBase, ITweenListener + { + public bool positionsInPercent; + + Dictionary _storage; + GearXYValue _default; + + public GearXY(GObject owner) + : base(owner) + { + } + + protected override void Init() + { + _default = new GearXYValue(_owner.x, _owner.y, _owner.x / _owner.parent.width, _owner.y / _owner.parent.height); + _storage = new Dictionary(); + } + + override protected void AddStatus(string pageId, ByteBuffer buffer) + { + GearXYValue gv; + if (pageId == null) + gv = _default; + else + { + gv = new GearXYValue(); + _storage[pageId] = gv; + } + + gv.x = buffer.ReadInt(); + gv.y = buffer.ReadInt(); + } + + public void AddExtStatus(string pageId, ByteBuffer buffer) + { + GearXYValue gv; + if (pageId == null) + gv = _default; + else + gv = _storage[pageId]; + gv.px = buffer.ReadFloat(); + gv.py = buffer.ReadFloat(); + } + + override public void Apply() + { + GearXYValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + gv = _default; + + Vector2 endPos = new Vector2(); + + if (positionsInPercent && _owner.parent != null) + { + endPos.x = gv.px * _owner.parent.width; + endPos.y = gv.py * _owner.parent.height; + } + else + { + endPos.x = gv.x; + endPos.y = gv.y; + } + + if (_tweenConfig != null && _tweenConfig.tween && UIPackage._constructing == 0 && !disableAllTweenEffect) + { + if (_tweenConfig._tweener != null) + { + if (_tweenConfig._tweener.endValue.x != endPos.x || _tweenConfig._tweener.endValue.y != endPos.y) + { + _tweenConfig._tweener.Kill(true); + _tweenConfig._tweener = null; + } + else + return; + } + Vector2 origin = _owner.xy; + + if (endPos != origin) + { + if (_owner.CheckGearController(0, _controller)) + _tweenConfig._displayLockToken = _owner.AddDisplayLock(); + + _tweenConfig._tweener = GTween.To(origin, endPos, _tweenConfig.duration) + .SetDelay(_tweenConfig.delay) + .SetEase(_tweenConfig.easeType, _tweenConfig.customEase) + .SetTarget(this) + .SetListener(this); + } + } + else + { + _owner._gearLocked = true; + _owner.SetXY(endPos.x, endPos.y); + _owner._gearLocked = false; + } + } + + public void OnTweenStart(GTweener tweener) + {//nothing + } + + public void OnTweenUpdate(GTweener tweener) + { + _owner._gearLocked = true; + _owner.SetXY(tweener.value.x, tweener.value.y); + _owner._gearLocked = false; + + _owner.InvalidateBatchingState(); + } + + public void OnTweenComplete(GTweener tweener) + { + _tweenConfig._tweener = null; + if (_tweenConfig._displayLockToken != 0) + { + _owner.ReleaseDisplayLock(_tweenConfig._displayLockToken); + _tweenConfig._displayLockToken = 0; + } + _owner.DispatchEvent("onGearStop", this); + } + + override public void UpdateState() + { + GearXYValue gv; + if (!_storage.TryGetValue(_controller.selectedPageId, out gv)) + _storage[_controller.selectedPageId] = gv = new GearXYValue(); + + gv.x = _owner.x; + gv.y = _owner.y; + + gv.px = _owner.x / _owner.parent.width; + gv.py = _owner.y / _owner.parent.height; + + } + + override public void UpdateFromRelations(float dx, float dy) + { + if (_controller != null && _storage != null && !positionsInPercent) + { + foreach (GearXYValue gv in _storage.Values) + { + gv.x += dx; + gv.y += dy; + } + _default.x += dx; + _default.y += dy; + + UpdateState(); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs.meta new file mode 100644 index 0000000..1d0de02 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/GearXY.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 082a852494dc8b94485733188788d58c +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs new file mode 100644 index 0000000..7c7900f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs @@ -0,0 +1,35 @@ + +namespace FairyGUI +{ + /// + /// + /// + public interface IAnimationGear + { + /// + /// + /// + bool playing { get; set; } + + /// + /// + /// + int frame { get; set; } + + /// + /// + /// + float timeScale { get; set; } + + /// + /// + /// + bool ignoreEngineTimeScale { get; set; } + + /// + /// + /// + /// + void Advance(float time); + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs.meta new file mode 100644 index 0000000..fa9f30d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IAnimationGear.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d68e5b2a3af5c444689f459a8b265df7 +timeCreated: 1476166204 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs new file mode 100644 index 0000000..a3b9f23 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public interface IColorGear + { + /// + /// + /// + Color color { get; set; } + } + + /// + /// + /// + public interface ITextColorGear : IColorGear + { + /// + /// + /// + Color strokeColor { get; set; } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs.meta new file mode 100644 index 0000000..40b05e4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Gears/IColorGear.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e872cd17b52152a4fa250c830b9bb8cd +timeCreated: 1476166204 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs b/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs new file mode 100644 index 0000000..e6623b2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs @@ -0,0 +1,36 @@ + +namespace FairyGUI +{ + /// + /// + /// + public delegate void UILoadCallback(); + + /// + /// + /// + public interface IUISource + { + /// + /// + /// + string fileName { get; set; } + + /// + /// + /// + bool loaded { get; } + + /// + /// + /// + /// + void Load(UILoadCallback callback); + + /// + /// 取消加载 + /// + void Cancel(); + + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs.meta new file mode 100644 index 0000000..acb9ebe --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/IUISource.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c742c10608d6ac84bb210a9d6abcb05d +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs new file mode 100644 index 0000000..5955172 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs @@ -0,0 +1,29 @@ + +namespace FairyGUI +{ + /// + /// + /// + public struct Margin + { + /// + /// + /// + public int left; + + /// + /// + /// + public int right; + + /// + /// + /// + public int top; + + /// + /// + /// + public int bottom; + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs.meta new file mode 100644 index 0000000..e70a962 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Margin.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7f31f9a61b0590943ac37f1c16ff0dc9 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs b/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs new file mode 100644 index 0000000..8038723 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs @@ -0,0 +1,87 @@ +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public class PackageItem + { + public UIPackage owner; + + public PackageItemType type; + public ObjectType objectType; + + public string id; + public string name; + public int width; + public int height; + public string file; + public bool exported; + public NTexture texture; + public ByteBuffer rawData; + public string[] branches; + public string[] highResolution; + + //image + public Rect? scale9Grid; + public bool scaleByTile; + public int tileGridIndice; + public PixelHitTestData pixelHitTestData; + + //movieclip + public float interval; + public float repeatDelay; + public bool swing; + public MovieClip.Frame[] frames; + + //component + public bool translated; + public UIObjectFactory.GComponentCreator extensionCreator; + + //font + public BitmapFont bitmapFont; + + //sound + public NAudioClip audioClip; + + //spine/dragonbones + public Vector2 skeletonAnchor; + public object skeletonAsset; + public HashSet skeletonLoaders; + + public object Load() + { + return owner.GetItemAsset(this); + } + + public PackageItem getBranch() + { + if (branches != null && owner._branchIndex != -1) + { + string itemId = branches[owner._branchIndex]; + if (itemId != null) + return owner.GetItem(itemId); + } + + return this; + } + + public PackageItem getHighResolution() + { + if (highResolution != null && GRoot.contentScaleLevel > 0) + { + int i = GRoot.contentScaleLevel - 1; + if (i >= highResolution.Length) + i = highResolution.Length - 1; + string itemId = highResolution[i]; + if (itemId != null) + return owner.GetItem(itemId); + } + + return this; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs.meta new file mode 100644 index 0000000..292b7bb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/PackageItem.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: acb6fb5c63e3f49409db871a5a97261b +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs b/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs new file mode 100644 index 0000000..f349860 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs @@ -0,0 +1,565 @@ +using System; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public class PopupMenu : EventDispatcher + { + protected GComponent _contentPane; + protected GList _list; + protected GObject _expandingItem; + + PopupMenu _parentMenu; + TimerCallback _showSubMenu; + TimerCallback _closeSubMenu; + EventListener _onPopup; + EventListener _onClose; + + public int visibleItemCount; + public bool hideOnClickItem; + public bool autoSize; + + const string EVENT_TYPE = "PopupMenuItemClick"; + + public PopupMenu() + { + Create(null); + } + + /// + /// + /// + /// + public PopupMenu(string resourceURL) + { + Create(resourceURL); + } + + public EventListener onPopup + { + get { return _onPopup ?? (_onPopup = new EventListener(this, "onPopup")); } + } + + public EventListener onClose + { + get { return _onClose ?? (_onClose = new EventListener(this, "onClose")); } + } + + void Create(string resourceURL) + { + if (resourceURL == null) + { + resourceURL = UIConfig.popupMenu; + if (resourceURL == null) + { + Debug.LogError("FairyGUI: UIConfig.popupMenu not defined"); + return; + } + } + + _contentPane = UIPackage.CreateObjectFromURL(resourceURL).asCom; + _contentPane.onAddedToStage.Add(__addedToStage); + _contentPane.onRemovedFromStage.Add(__removeFromStage); + _contentPane.focusable = false; + + _list = _contentPane.GetChild("list").asList; + _list.RemoveChildrenToPool(); + + _list.AddRelation(_contentPane, RelationType.Width); + _list.RemoveRelation(_contentPane, RelationType.Height); + _contentPane.AddRelation(_list, RelationType.Height); + + _list.onClickItem.Add(__clickItem); + + hideOnClickItem = true; + _showSubMenu = __showSubMenu; + _closeSubMenu = CloseSubMenu; + } + + /// + /// + /// + /// + /// + /// + public GButton AddItem(string caption, EventCallback0 callback) + { + GButton item = CreateItem(caption, callback); + _list.AddChild(item); + + return item; + } + + /// + /// + /// + /// + /// + /// + public GButton AddItem(string caption, EventCallback1 callback) + { + GButton item = CreateItem(caption, callback); + _list.AddChild(item); + + return item; + } + + /// + /// + /// + /// + /// + /// + /// + public GButton AddItemAt(string caption, int index, EventCallback1 callback) + { + GButton item = CreateItem(caption, callback); + _list.AddChildAt(item, index); + + return item; + } + + /// + /// + /// + /// + /// + /// + /// + public GButton AddItemAt(string caption, int index, EventCallback0 callback) + { + GButton item = CreateItem(caption, callback); + _list.AddChildAt(item, index); + + return item; + } + + GButton CreateItem(string caption, Delegate callback) + { + GButton item = _list.GetFromPool(_list.defaultItem).asButton; + item.title = caption; + item.grayed = false; + Controller c = item.GetController("checked"); + if (c != null) + c.selectedIndex = 0; + item.RemoveEventListeners(EVENT_TYPE); + if (callback is EventCallback0) + item.AddEventListener(EVENT_TYPE, (EventCallback0)callback); + else + item.AddEventListener(EVENT_TYPE, (EventCallback1)callback); + + item.onRollOver.Add(__rollOver); + item.onRollOut.Add(__rollOut); + + return item; + } + + /// + /// + /// + public void AddSeperator() + { + AddSeperator(-1); + } + + /// + /// + /// + public void AddSeperator(int index) + { + if (UIConfig.popupMenu_seperator == null) + { + Debug.LogError("FairyGUI: UIConfig.popupMenu_seperator not defined"); + return; + } + + if (index == -1) + _list.AddItemFromPool(UIConfig.popupMenu_seperator); + else + { + GObject item = _list.GetFromPool(UIConfig.popupMenu_seperator); + _list.AddChildAt(item, index); + } + } + + /// + /// + /// + /// + /// + public string GetItemName(int index) + { + GButton item = _list.GetChildAt(index).asButton; + return item.name; + } + + /// + /// + /// + /// + /// + public void SetItemText(string name, string caption) + { + GButton item = _list.GetChild(name).asButton; + item.title = caption; + } + + /// + /// + /// + /// + /// + public void SetItemVisible(string name, bool visible) + { + GButton item = _list.GetChild(name).asButton; + if (item.visible != visible) + { + item.visible = visible; + _list.SetBoundsChangedFlag(); + } + } + + /// + /// + /// + /// + /// + public void SetItemGrayed(string name, bool grayed) + { + GButton item = _list.GetChild(name).asButton; + item.grayed = grayed; + } + + /// + /// + /// + /// + /// + public void SetItemCheckable(string name, bool checkable) + { + GButton item = _list.GetChild(name).asButton; + Controller c = item.GetController("checked"); + if (c != null) + { + if (checkable) + { + if (c.selectedIndex == 0) + c.selectedIndex = 1; + } + else + c.selectedIndex = 0; + } + } + + /// + /// + /// + /// + /// + public void SetItemChecked(string name, bool check) + { + GButton item = _list.GetChild(name).asButton; + Controller c = item.GetController("checked"); + if (c != null) + c.selectedIndex = check ? 2 : 1; + } + + [Obsolete("Use IsItemChecked instead")] + public bool isItemChecked(string name) + { + return IsItemChecked(name); + } + + /// + /// + /// + /// + /// + public bool IsItemChecked(string name) + { + GButton item = _list.GetChild(name).asButton; + Controller c = item.GetController("checked"); + if (c != null) + return c.selectedIndex == 2; + else + return false; + } + + /// + /// + /// + /// + public void RemoveItem(string name) + { + GComponent item = _list.GetChild(name).asCom; + if (item != null) + { + item.RemoveEventListeners(EVENT_TYPE); + if (item.data is PopupMenu) + { + ((PopupMenu)item.data).Dispose(); + item.data = null; + } + int index = _list.GetChildIndex(item); + _list.RemoveChildToPoolAt(index); + } + } + + /// + /// + /// + public void ClearItems() + { + _list.RemoveChildrenToPool(); + } + + /// + /// + /// + public int itemCount + { + get { return _list.numChildren; } + } + + /// + /// + /// + public GComponent contentPane + { + get { return _contentPane; } + } + + /// + /// + /// + public GList list + { + get { return _list; } + } + + public void Dispose() + { + int cnt = _list.numChildren; + for (int i = 0; i < cnt; i++) + { + GObject obj = _list.GetChildAt(i); + if (obj.data is PopupMenu) + ((PopupMenu)obj.data).Dispose(); + } + _contentPane.Dispose(); + } + + /// + /// + /// + public void Show() + { + Show(null, PopupDirection.Auto); + } + + /// + /// + /// + /// + public void Show(GObject target) + { + Show(target, PopupDirection.Auto, null); + } + + [Obsolete] + public void Show(GObject target, object downward) + { + Show(target, downward == null ? PopupDirection.Auto : ((bool)downward == true ? PopupDirection.Down : PopupDirection.Up), null); + } + + /// + /// + /// + /// + /// + public void Show(GObject target, PopupDirection dir) + { + Show(target, PopupDirection.Auto, null); + } + + /// + /// + /// + /// + /// + /// + public void Show(GObject target, PopupDirection dir, PopupMenu parentMenu) + { + GRoot r = target != null ? target.root : GRoot.inst; + r.ShowPopup(this.contentPane, (target is GRoot) ? null : target, dir); + _parentMenu = parentMenu; + } + + public void Hide() + { + if (contentPane.parent != null) + ((GRoot)contentPane.parent).HidePopup(contentPane); + } + + void ShowSubMenu(GObject item) + { + _expandingItem = item; + + PopupMenu popup = item.data as PopupMenu; + if (item is GButton) + ((GButton)item).selected = true; + popup.Show(item, PopupDirection.Auto, this); + + Vector2 pt = contentPane.LocalToRoot(new Vector2(item.x + item.width - 5, item.y - 5), item.root); + popup.contentPane.position = pt; + } + + void CloseSubMenu(object param) + { + if (contentPane.isDisposed) + return; + + if (_expandingItem == null) + return; + + if (_expandingItem is GButton) + ((GButton)_expandingItem).selected = false; + PopupMenu popup = (PopupMenu)_expandingItem.data; + if (popup == null) + return; + + _expandingItem = null; + popup.Hide(); + } + + private void __clickItem(EventContext context) + { + GButton item = ((GObject)context.data).asButton; + if (item == null) + return; + + if (item.grayed) + { + _list.selectedIndex = -1; + return; + } + + Controller c = item.GetController("checked"); + if (c != null && c.selectedIndex != 0) + { + if (c.selectedIndex == 1) + c.selectedIndex = 2; + else + c.selectedIndex = 1; + } + + if (hideOnClickItem) + { + if (_parentMenu != null) + _parentMenu.Hide(); + Hide(); + } + + item.DispatchEvent(EVENT_TYPE, item); //event data is for backward compatibility + } + + void __addedToStage() + { + DispatchEvent("onPopup", null); + + if (autoSize) + { + _list.EnsureBoundsCorrect(); + int cnt = _list.numChildren; + float maxDelta = -1000; + for (int i = 0; i < cnt; i++) + { + GButton obj = _list.GetChildAt(i).asButton; + if (obj == null) + continue; + GTextField tf = obj.GetTextField(); + if (tf != null) + { + float v = tf.textWidth - tf.width; + if (v > maxDelta) + maxDelta = v; + } + } + + if (contentPane.width + maxDelta > contentPane.initWidth) + contentPane.width += maxDelta; + else + contentPane.width = contentPane.initWidth; + } + + _list.selectedIndex = -1; + _list.ResizeToFit(visibleItemCount > 0 ? visibleItemCount : int.MaxValue, 10); + } + + void __removeFromStage() + { + _parentMenu = null; + + if (_expandingItem != null) + Timers.inst.Add(0, 1, _closeSubMenu); + + DispatchEvent("onClose", null); + } + + void __rollOver(EventContext context) + { + GObject item = (GObject)context.sender; + if ((item.data is PopupMenu) || _expandingItem != null) + { + Timers.inst.Add(0.1f, 1, _showSubMenu, item); + } + } + + void __showSubMenu(object param) + { + if (contentPane.isDisposed) + return; + + GObject item = (GObject)param; + GRoot r = contentPane.root; + if (r == null) + return; + + if (_expandingItem != null) + { + if (_expandingItem == item) + return; + + CloseSubMenu(null); + } + + PopupMenu popup = item.data as PopupMenu; + if (popup == null) + return; + + ShowSubMenu(item); + } + + void __rollOut(EventContext context) + { + if (_expandingItem == null) + return; + + Timers.inst.Remove(_showSubMenu); + + GRoot r = contentPane.root; + if (r != null) + { + PopupMenu popup = (PopupMenu)_expandingItem.data; + Vector2 pt = popup.contentPane.GlobalToLocal(context.inputEvent.position); + if (pt.x >= 0 && pt.y >= 0 && pt.x < popup.contentPane.width && pt.y < popup.contentPane.height) + return; + } + + CloseSubMenu(null); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs.meta new file mode 100644 index 0000000..e82a03f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/PopupMenu.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f15a5c9ba9a949d468aeb92e75f70dbd +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs b/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs new file mode 100644 index 0000000..62133ad --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs @@ -0,0 +1,672 @@ +using System.Collections.Generic; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + class RelationDef + { + public bool percent; + public RelationType type; + public int axis; + + public void copyFrom(RelationDef source) + { + this.percent = source.percent; + this.type = source.type; + this.axis = source.axis; + } + } + + class RelationItem + { + GObject _owner; + GObject _target; + List _defs; + Vector4 _targetData; + + public RelationItem(GObject owner) + { + _owner = owner; + _defs = new List(); + } + + public GObject target + { + get { return _target; } + set + { + if (_target != value) + { + if (_target != null) + ReleaseRefTarget(_target); + _target = value; + if (_target != null) + AddRefTarget(_target); + } + } + } + + public void Add(RelationType relationType, bool usePercent) + { + if (relationType == RelationType.Size) + { + Add(RelationType.Width, usePercent); + Add(RelationType.Height, usePercent); + return; + } + + int dc = _defs.Count; + for (int k = 0; k < dc; k++) + { + if (_defs[k].type == relationType) + return; + } + + InternalAdd(relationType, usePercent); + } + + public void InternalAdd(RelationType relationType, bool usePercent) + { + if (relationType == RelationType.Size) + { + InternalAdd(RelationType.Width, usePercent); + InternalAdd(RelationType.Height, usePercent); + return; + } + + RelationDef info = new RelationDef(); + info.percent = usePercent; + info.type = relationType; + info.axis = (relationType <= RelationType.Right_Right || relationType == RelationType.Width || relationType >= RelationType.LeftExt_Left && relationType <= RelationType.RightExt_Right) ? 0 : 1; + _defs.Add(info); + } + + public void Remove(RelationType relationType) + { + if (relationType == RelationType.Size) + { + Remove(RelationType.Width); + Remove(RelationType.Height); + return; + } + + int dc = _defs.Count; + for (int k = 0; k < dc; k++) + { + if (_defs[k].type == relationType) + { + _defs.RemoveAt(k); + break; + } + } + } + + public void CopyFrom(RelationItem source) + { + this.target = source.target; + + _defs.Clear(); + foreach (RelationDef info in source._defs) + { + RelationDef info2 = new RelationDef(); + info2.copyFrom(info); + _defs.Add(info2); + } + } + + public void Dispose() + { + if (_target != null) + { + ReleaseRefTarget(_target); + _target = null; + } + } + + public bool isEmpty + { + get { return _defs.Count == 0; } + } + + public void ApplyOnSelfSizeChanged(float dWidth, float dHeight, bool applyPivot) + { + int cnt = _defs.Count; + if (cnt == 0) + return; + + float ox = _owner.x; + float oy = _owner.y; + + for (int i = 0; i < cnt; i++) + { + RelationDef info = _defs[i]; + switch (info.type) + { + case RelationType.Center_Center: + _owner.x -= (0.5f - (applyPivot ? _owner.pivotX : 0)) * dWidth; + break; + + case RelationType.Right_Center: + case RelationType.Right_Left: + case RelationType.Right_Right: + _owner.x -= (1 - (applyPivot ? _owner.pivotX : 0)) * dWidth; + break; + + case RelationType.Middle_Middle: + _owner.y -= (0.5f - (applyPivot ? _owner.pivotY : 0)) * dHeight; + break; + + case RelationType.Bottom_Middle: + case RelationType.Bottom_Top: + case RelationType.Bottom_Bottom: + _owner.y -= (1 - (applyPivot ? _owner.pivotY : 0)) * dHeight; + break; + } + } + + if (!Mathf.Approximately(ox, _owner.x) || !Mathf.Approximately(oy, _owner.y)) + { + ox = _owner.x - ox; + oy = _owner.y - oy; + + _owner.UpdateGearFromRelations(1, ox, oy); + + if (_owner.parent != null) + { + int transCount = _owner.parent._transitions.Count; + for (int i = 0; i < transCount; i++) + _owner.parent._transitions[i].UpdateFromRelations(_owner.id, ox, oy); + } + } + } + + void ApplyOnXYChanged(RelationDef info, float dx, float dy) + { + float tmp; + switch (info.type) + { + case RelationType.Left_Left: + case RelationType.Left_Center: + case RelationType.Left_Right: + case RelationType.Center_Center: + case RelationType.Right_Left: + case RelationType.Right_Center: + case RelationType.Right_Right: + _owner.x += dx; + break; + + case RelationType.Top_Top: + case RelationType.Top_Middle: + case RelationType.Top_Bottom: + case RelationType.Middle_Middle: + case RelationType.Bottom_Top: + case RelationType.Bottom_Middle: + case RelationType.Bottom_Bottom: + _owner.y += dy; + break; + + case RelationType.Width: + case RelationType.Height: + break; + + case RelationType.LeftExt_Left: + case RelationType.LeftExt_Right: + if (_owner != _target.parent) + { + tmp = _owner.xMin; + _owner.width = _owner._rawWidth - dx; + _owner.xMin = tmp + dx; + } + else + _owner.width = _owner._rawWidth - dx; + break; + + case RelationType.RightExt_Left: + case RelationType.RightExt_Right: + if (_owner != _target.parent) + { + tmp = _owner.xMin; + _owner.width = _owner._rawWidth + dx; + _owner.xMin = tmp; + } + else + _owner.width = _owner._rawWidth + dx; + break; + + case RelationType.TopExt_Top: + case RelationType.TopExt_Bottom: + if (_owner != _target.parent) + { + tmp = _owner.yMin; + _owner.height = _owner._rawHeight - dy; + _owner.yMin = tmp + dy; + } + else + _owner.height = _owner._rawHeight - dy; + break; + + case RelationType.BottomExt_Top: + case RelationType.BottomExt_Bottom: + if (_owner != _target.parent) + { + tmp = _owner.yMin; + _owner.height = _owner._rawHeight + dy; + _owner.yMin = tmp; + } + else + _owner.height = _owner._rawHeight + dy; + break; + } + } + + void ApplyOnSizeChanged(RelationDef info) + { + float pos = 0, pivot = 0, delta = 0; + if (info.axis == 0) + { + if (_target != _owner.parent) + { + pos = _target.x; + if (_target.pivotAsAnchor) + pivot = _target.pivotX; + } + + if (info.percent) + { + if (_targetData.z != 0) + delta = _target._width / _targetData.z; + } + else + delta = _target._width - _targetData.z; + } + else + { + if (_target != _owner.parent) + { + pos = _target.y; + if (_target.pivotAsAnchor) + pivot = _target.pivotY; + } + + if (info.percent) + { + if (_targetData.w != 0) + delta = _target._height / _targetData.w; + } + else + delta = _target._height - _targetData.w; + } + + float v, tmp; + + switch (info.type) + { + case RelationType.Left_Left: + if (info.percent) + _owner.xMin = pos + (_owner.xMin - pos) * delta; + else if (pivot != 0) + _owner.x += delta * (-pivot); + break; + case RelationType.Left_Center: + if (info.percent) + _owner.xMin = pos + (_owner.xMin - pos) * delta; + else + _owner.x += delta * (0.5f - pivot); + break; + case RelationType.Left_Right: + if (info.percent) + _owner.xMin = pos + (_owner.xMin - pos) * delta; + else + _owner.x += delta * (1 - pivot); + break; + case RelationType.Center_Center: + if (info.percent) + _owner.xMin = pos + (_owner.xMin + _owner._rawWidth * 0.5f - pos) * delta - _owner._rawWidth * 0.5f; + else + _owner.x += delta * (0.5f - pivot); + break; + case RelationType.Right_Left: + if (info.percent) + _owner.xMin = pos + (_owner.xMin + _owner._rawWidth - pos) * delta - _owner._rawWidth; + else if (pivot != 0) + _owner.x += delta * (-pivot); + break; + case RelationType.Right_Center: + if (info.percent) + _owner.xMin = pos + (_owner.xMin + _owner._rawWidth - pos) * delta - _owner._rawWidth; + else + _owner.x += delta * (0.5f - pivot); + break; + case RelationType.Right_Right: + if (info.percent) + _owner.xMin = pos + (_owner.xMin + _owner._rawWidth - pos) * delta - _owner._rawWidth; + else + _owner.x += delta * (1 - pivot); + break; + + case RelationType.Top_Top: + if (info.percent) + _owner.yMin = pos + (_owner.yMin - pos) * delta; + else if (pivot != 0) + _owner.y += delta * (-pivot); + break; + case RelationType.Top_Middle: + if (info.percent) + _owner.yMin = pos + (_owner.yMin - pos) * delta; + else + _owner.y += delta * (0.5f - pivot); + break; + case RelationType.Top_Bottom: + if (info.percent) + _owner.yMin = pos + (_owner.yMin - pos) * delta; + else + _owner.y += delta * (1 - pivot); + break; + case RelationType.Middle_Middle: + if (info.percent) + _owner.yMin = pos + (_owner.yMin + _owner._rawHeight * 0.5f - pos) * delta - _owner._rawHeight * 0.5f; + else + _owner.y += delta * (0.5f - pivot); + break; + case RelationType.Bottom_Top: + if (info.percent) + _owner.yMin = pos + (_owner.yMin + _owner._rawHeight - pos) * delta - _owner._rawHeight; + else if (pivot != 0) + _owner.y += delta * (-pivot); + break; + case RelationType.Bottom_Middle: + if (info.percent) + _owner.yMin = pos + (_owner.yMin + _owner._rawHeight - pos) * delta - _owner._rawHeight; + else + _owner.y += delta * (0.5f - pivot); + break; + case RelationType.Bottom_Bottom: + if (info.percent) + _owner.yMin = pos + (_owner.yMin + _owner._rawHeight - pos) * delta - _owner._rawHeight; + else + _owner.y += delta * (1 - pivot); + break; + + case RelationType.Width: + if (_owner.underConstruct && _owner == _target.parent) + v = _owner.sourceWidth - _target.initWidth; + else + v = _owner._rawWidth - _targetData.z; + if (info.percent) + v = v * delta; + if (_target == _owner.parent) + { + if (_owner.pivotAsAnchor) + { + tmp = _owner.xMin; + _owner.SetSize(_target._width + v, _owner._rawHeight, true); + _owner.xMin = tmp; + } + else + _owner.SetSize(_target._width + v, _owner._rawHeight, true); + } + else + _owner.width = _target._width + v; + break; + case RelationType.Height: + if (_owner.underConstruct && _owner == _target.parent) + v = _owner.sourceHeight - _target.initHeight; + else + v = _owner._rawHeight - _targetData.w; + if (info.percent) + v = v * delta; + if (_target == _owner.parent) + { + if (_owner.pivotAsAnchor) + { + tmp = _owner.yMin; + _owner.SetSize(_owner._rawWidth, _target._height + v, true); + _owner.yMin = tmp; + } + else + _owner.SetSize(_owner._rawWidth, _target._height + v, true); + } + else + _owner.height = _target._height + v; + break; + + case RelationType.LeftExt_Left: + tmp = _owner.xMin; + if (info.percent) + v = pos + (tmp - pos) * delta - tmp; + else + v = delta * (-pivot); + _owner.width = _owner._rawWidth - v; + _owner.xMin = tmp + v; + break; + case RelationType.LeftExt_Right: + tmp = _owner.xMin; + if (info.percent) + v = pos + (tmp - pos) * delta - tmp; + else + v = delta * (1 - pivot); + _owner.width = _owner._rawWidth - v; + _owner.xMin = tmp + v; + break; + case RelationType.RightExt_Left: + tmp = _owner.xMin; + if (info.percent) + v = pos + (tmp + _owner._rawWidth - pos) * delta - (tmp + _owner._rawWidth); + else + v = delta * (-pivot); + _owner.width = _owner._rawWidth + v; + _owner.xMin = tmp; + break; + case RelationType.RightExt_Right: + tmp = _owner.xMin; + if (info.percent) + { + if (_owner == _target.parent) + { + if (_owner.underConstruct) + _owner.width = pos + _target._width - _target._width * pivot + + (_owner.sourceWidth - pos - _target.initWidth + _target.initWidth * pivot) * delta; + else + _owner.width = pos + (_owner._rawWidth - pos) * delta; + } + else + { + v = pos + (tmp + _owner._rawWidth - pos) * delta - (tmp + _owner._rawWidth); + _owner.width = _owner._rawWidth + v; + _owner.xMin = tmp; + } + } + else + { + if (_owner == _target.parent) + { + if (_owner.underConstruct) + _owner.width = _owner.sourceWidth + (_target._width - _target.initWidth) * (1 - pivot); + else + _owner.width = _owner._rawWidth + delta * (1 - pivot); + } + else + { + v = delta * (1 - pivot); + _owner.width = _owner._rawWidth + v; + _owner.xMin = tmp; + } + } + break; + case RelationType.TopExt_Top: + tmp = _owner.yMin; + if (info.percent) + v = pos + (tmp - pos) * delta - tmp; + else + v = delta * (-pivot); + _owner.height = _owner._rawHeight - v; + _owner.yMin = tmp + v; + break; + case RelationType.TopExt_Bottom: + tmp = _owner.yMin; + if (info.percent) + v = pos + (tmp - pos) * delta - tmp; + else + v = delta * (1 - pivot); + _owner.height = _owner._rawHeight - v; + _owner.yMin = tmp + v; + break; + case RelationType.BottomExt_Top: + tmp = _owner.yMin; + if (info.percent) + v = pos + (tmp + _owner._rawHeight - pos) * delta - (tmp + _owner._rawHeight); + else + v = delta * (-pivot); + _owner.height = _owner._rawHeight + v; + _owner.yMin = tmp; + break; + case RelationType.BottomExt_Bottom: + tmp = _owner.yMin; + if (info.percent) + { + if (_owner == _target.parent) + { + if (_owner.underConstruct) + _owner.height = pos + _target._height - _target._height * pivot + + (_owner.sourceHeight - pos - _target.initHeight + _target.initHeight * pivot) * delta; + else + _owner.height = pos + (_owner._rawHeight - pos) * delta; + } + else + { + v = pos + (tmp + _owner._rawHeight - pos) * delta - (tmp + _owner._rawHeight); + _owner.height = _owner._rawHeight + v; + _owner.yMin = tmp; + } + } + else + { + if (_owner == _target.parent) + { + if (_owner.underConstruct) + _owner.height = _owner.sourceHeight + (_target._height - _target.initHeight) * (1 - pivot); + else + _owner.height = _owner._rawHeight + delta * (1 - pivot); + } + else + { + v = delta * (1 - pivot); + _owner.height = _owner._rawHeight + v; + _owner.yMin = tmp; + } + } + break; + } + } + + void AddRefTarget(GObject target) + { + if (target != _owner.parent) + target.onPositionChanged.Add(__targetXYChanged); + target.onSizeChanged.Add(__targetSizeChanged); + _targetData.x = _target.x; + _targetData.y = _target.y; + _targetData.z = _target._width; + _targetData.w = _target._height; + } + + void ReleaseRefTarget(GObject target) + { + target.onPositionChanged.Remove(__targetXYChanged); + target.onSizeChanged.Remove(__targetSizeChanged); + } + + void __targetXYChanged(EventContext context) + { + if (_owner.relations.handling != null + || _owner.group != null && _owner.group._updating != 0) + { + _targetData.x = _target.x; + _targetData.y = _target.y; + return; + } + + _owner.relations.handling = (GObject)context.sender; + + float ox = _owner.x; + float oy = _owner.y; + float dx = _target.x - _targetData.x; + float dy = _target.y - _targetData.y; + + int cnt = _defs.Count; + for (int i = 0; i < cnt; i++) + ApplyOnXYChanged(_defs[i], dx, dy); + + _targetData.x = _target.x; + _targetData.y = _target.y; + + if (!Mathf.Approximately(ox, _owner.x) || !Mathf.Approximately(oy, _owner.y)) + { + ox = _owner.x - ox; + oy = _owner.y - oy; + + _owner.UpdateGearFromRelations(1, ox, oy); + + if (_owner.parent != null) + { + int transCount = _owner.parent._transitions.Count; + for (int i = 0; i < transCount; i++) + _owner.parent._transitions[i].UpdateFromRelations(_owner.id, ox, oy); + } + } + + _owner.relations.handling = null; + } + + void __targetSizeChanged(EventContext context) + { + if (_owner.relations.handling != null + || _owner.group != null && _owner.group._updating != 0) + { + _targetData.z = _target._width; + _targetData.w = _target._height; + return; + } + + _owner.relations.handling = (GObject)context.sender; + + float ox = _owner.x; + float oy = _owner.y; + float ow = _owner._rawWidth; + float oh = _owner._rawHeight; + + int cnt = _defs.Count; + for (int i = 0; i < cnt; i++) + ApplyOnSizeChanged(_defs[i]); + + _targetData.z = _target._width; + _targetData.w = _target._height; + + if (!Mathf.Approximately(ox, _owner.x) || !Mathf.Approximately(oy, _owner.y)) + { + ox = _owner.x - ox; + oy = _owner.y - oy; + + _owner.UpdateGearFromRelations(1, ox, oy); + + if (_owner.parent != null) + { + int transCount = _owner.parent._transitions.Count; + for (int i = 0; i < transCount; i++) + _owner.parent._transitions[i].UpdateFromRelations(_owner.id, ox, oy); + } + } + + if (!Mathf.Approximately(ow, _owner._rawWidth) || !Mathf.Approximately(oh, _owner._rawHeight)) + { + ow = _owner._rawWidth - ow; + oh = _owner._rawHeight - oh; + + _owner.UpdateGearFromRelations(2, ow, oh); + } + + _owner.relations.handling = null; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs.meta new file mode 100644 index 0000000..e523b3f --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/RelationItem.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 859441fdd74333a498ff048e6b48798b +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs new file mode 100644 index 0000000..14ef2ba --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs @@ -0,0 +1,220 @@ +using System; +using System.Collections.Generic; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public class Relations + { + GObject _owner; + List _items; + + public GObject handling; + + public Relations(GObject owner) + { + _owner = owner; + _items = new List(); + } + + /// + /// + /// + /// + /// + public void Add(GObject target, RelationType relationType) + { + Add(target, relationType, false); + } + + /// + /// + /// + /// + /// + /// + public void Add(GObject target, RelationType relationType, bool usePercent) + { + int cnt = _items.Count; + for (int i = 0; i < cnt; i++) + { + RelationItem item = _items[i]; + if (item.target == target) + { + item.Add(relationType, usePercent); + return; + } + } + RelationItem newItem = new RelationItem(_owner); + newItem.target = target; + newItem.Add(relationType, usePercent); + _items.Add(newItem); + } + + /// + /// + /// + /// + /// + public void Remove(GObject target, RelationType relationType) + { + int cnt = _items.Count; + int i = 0; + while (i < cnt) + { + RelationItem item = _items[i]; + if (item.target == target) + { + item.Remove(relationType); + if (item.isEmpty) + { + item.Dispose(); + _items.RemoveAt(i); + cnt--; + continue; + } + else + i++; + } + i++; + } + } + + /// + /// + /// + /// + /// + public bool Contains(GObject target) + { + int cnt = _items.Count; + for (int i = 0; i < cnt; i++) + { + RelationItem item = _items[i]; + if (item.target == target) + return true; + } + return false; + } + + /// + /// + /// + /// + public void ClearFor(GObject target) + { + int cnt = _items.Count; + int i = 0; + while (i < cnt) + { + RelationItem item = _items[i]; + if (item.target == target) + { + item.Dispose(); + _items.RemoveAt(i); + cnt--; + } + else + i++; + } + } + + /// + /// + /// + public void ClearAll() + { + int cnt = _items.Count; + for (int i = 0; i < cnt; i++) + { + RelationItem item = _items[i]; + item.Dispose(); + } + _items.Clear(); + } + + /// + /// + /// + /// + public void CopyFrom(Relations source) + { + ClearAll(); + + List arr = source._items; + foreach (RelationItem ri in arr) + { + RelationItem item = new RelationItem(_owner); + item.CopyFrom(ri); + _items.Add(item); + } + } + + /// + /// + /// + public void Dispose() + { + ClearAll(); + handling = null; + } + + /// + /// + /// + /// + /// + /// + public void OnOwnerSizeChanged(float dWidth, float dHeight, bool applyPivot) + { + int cnt = _items.Count; + if (cnt == 0) + return; + + for (int i = 0; i < cnt; i++) + _items[i].ApplyOnSelfSizeChanged(dWidth, dHeight, applyPivot); + } + + /// + /// + /// + public bool isEmpty + { + get + { + return _items.Count == 0; + } + } + + public void Setup(ByteBuffer buffer, bool parentToChild) + { + int cnt = buffer.ReadByte(); + GObject target; + for (int i = 0; i < cnt; i++) + { + int targetIndex = buffer.ReadShort(); + if (targetIndex == -1) + target = _owner.parent; + else if (parentToChild) + target = ((GComponent)_owner).GetChildAt(targetIndex); + else + target = _owner.parent.GetChildAt(targetIndex); + + RelationItem newItem = new RelationItem(_owner); + newItem.target = target; + _items.Add(newItem); + + int cnt2 = buffer.ReadByte(); + for (int j = 0; j < cnt2; j++) + { + RelationType rt = (RelationType)buffer.ReadByte(); + bool usePercent = buffer.ReadBool(); + newItem.InternalAdd(rt, usePercent); + } + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs.meta new file mode 100644 index 0000000..3e21e9d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Relations.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4376a9406aa478a4b82816818842d737 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs b/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs new file mode 100644 index 0000000..c46af18 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs @@ -0,0 +1,2320 @@ +using System; +using UnityEngine; +using FairyGUI.Utils; + +namespace FairyGUI +{ + /// + /// + /// + public class ScrollPane : EventDispatcher + { + /// + /// 当前被拖拽的滚动面板。同一时间只能有一个在进行此操作。 + /// + public static ScrollPane draggingPane { get; private set; } + + ScrollType _scrollType; + float _scrollStep; + float _decelerationRate; + Margin _scrollBarMargin; + bool _bouncebackEffect; + bool _touchEffect; + bool _scrollBarDisplayAuto; + bool _vScrollNone; + bool _hScrollNone; + bool _needRefresh; + int _refreshBarAxis; + + bool _displayOnLeft; + bool _snapToItem; + internal bool _displayInDemand; + bool _mouseWheelEnabled; + bool _softnessOnTopOrLeftSide; + bool _pageMode; + Vector2 _pageSize; + bool _inertiaDisabled; + bool _maskDisabled; + bool _floating; + bool _dontClipMargin; + + float _xPos; + float _yPos; + + Vector2 _viewSize; + Vector2 _contentSize; + Vector2 _overlapSize; + Vector2 _containerPos; + Vector2 _beginTouchPos; + Vector2 _lastTouchPos; + Vector2 _lastTouchGlobalPos; + Vector2 _velocity; + float _velocityScale; + float _lastMoveTime; + bool _dragged; + bool _isHoldAreaDone; + int _aniFlag; + internal int _loop; + int _headerLockedSize; + int _footerLockedSize; + bool _hover; + + int _tweening; + Vector2 _tweenStart; + Vector2 _tweenChange; + Vector2 _tweenTime; + Vector2 _tweenDuration; + + Action _refreshDelegate; + TimerCallback _tweenUpdateDelegate; + GTweenCallback1 _hideScrollBarDelegate; + + GComponent _owner; + Container _maskContainer; + Container _container; + GScrollBar _hzScrollBar; + GScrollBar _vtScrollBar; + GComponent _header; + GComponent _footer; + Controller _pageController; + + EventListener _onScroll; + EventListener _onScrollEnd; + EventListener _onPullDownRelease; + EventListener _onPullUpRelease; + + static int _gestureFlag; + + public static float TWEEN_TIME_GO = 0.3f; //调用SetPos(ani)时使用的缓动时间 + public static float TWEEN_TIME_DEFAULT = 0.3f; //惯性滚动的最小缓动时间 + public static float PULL_RATIO = 0.5f; //下拉过顶或者上拉过底时允许超过的距离占显示区域的比例 + + public ScrollPane(GComponent owner) + { + _onScroll = new EventListener(this, "onScroll"); + _onScrollEnd = new EventListener(this, "onScrollEnd"); + + _scrollStep = UIConfig.defaultScrollStep; + _softnessOnTopOrLeftSide = UIConfig.allowSoftnessOnTopOrLeftSide; + _decelerationRate = UIConfig.defaultScrollDecelerationRate; + _touchEffect = UIConfig.defaultScrollTouchEffect; + _bouncebackEffect = UIConfig.defaultScrollBounceEffect; + _mouseWheelEnabled = true; + _pageSize = Vector2.one; + + _refreshDelegate = Refresh; + _tweenUpdateDelegate = TweenUpdate; + _hideScrollBarDelegate = __barTweenComplete; + + _owner = owner; + + _maskContainer = new Container(); + _owner.rootContainer.AddChild(_maskContainer); + + _container = _owner.container; + _container.SetXY(0, 0); + _maskContainer.AddChild(_container); + + _owner.rootContainer.onMouseWheel.Add(__mouseWheel); + _owner.rootContainer.onTouchBegin.Add(__touchBegin); + _owner.rootContainer.onTouchMove.Add(__touchMove); + _owner.rootContainer.onTouchEnd.Add(__touchEnd); + } + + public void Setup(ByteBuffer buffer) + { + _scrollType = (ScrollType)buffer.ReadByte(); + ScrollBarDisplayType scrollBarDisplay = (ScrollBarDisplayType)buffer.ReadByte(); + int flags = buffer.ReadInt(); + + if (buffer.ReadBool()) + { + _scrollBarMargin.top = buffer.ReadInt(); + _scrollBarMargin.bottom = buffer.ReadInt(); + _scrollBarMargin.left = buffer.ReadInt(); + _scrollBarMargin.right = buffer.ReadInt(); + } + + string vtScrollBarRes = buffer.ReadS(); + string hzScrollBarRes = buffer.ReadS(); + string headerRes = buffer.ReadS(); + string footerRes = buffer.ReadS(); + + _displayOnLeft = (flags & 1) != 0; + _snapToItem = (flags & 2) != 0; + _displayInDemand = (flags & 4) != 0; + _pageMode = (flags & 8) != 0; + if ((flags & 16) != 0) + _touchEffect = true; + else if ((flags & 32) != 0) + _touchEffect = false; + if ((flags & 64) != 0) + _bouncebackEffect = true; + else if ((flags & 128) != 0) + _bouncebackEffect = false; + _inertiaDisabled = (flags & 256) != 0; + _maskDisabled = (flags & 512) != 0; + _floating = (flags & 1024) != 0; + _dontClipMargin = (flags & 2048) != 0; + + if (scrollBarDisplay == ScrollBarDisplayType.Default) + { + if (Application.isMobilePlatform) + scrollBarDisplay = ScrollBarDisplayType.Auto; + else + scrollBarDisplay = UIConfig.defaultScrollBarDisplay; + } + + if (scrollBarDisplay != ScrollBarDisplayType.Hidden) + { + if (_scrollType == ScrollType.Both || _scrollType == ScrollType.Vertical) + { + string res = vtScrollBarRes != null ? vtScrollBarRes : UIConfig.verticalScrollBar; + if (!string.IsNullOrEmpty(res)) + { + _vtScrollBar = UIPackage.CreateObjectFromURL(res) as GScrollBar; + if (_vtScrollBar == null) + Debug.LogWarning("FairyGUI: cannot create scrollbar from " + res); + else + { + _vtScrollBar.SetScrollPane(this, true); + _owner.rootContainer.AddChild(_vtScrollBar.displayObject); + } + } + } + if (_scrollType == ScrollType.Both || _scrollType == ScrollType.Horizontal) + { + string res = hzScrollBarRes != null ? hzScrollBarRes : UIConfig.horizontalScrollBar; + if (!string.IsNullOrEmpty(res)) + { + _hzScrollBar = UIPackage.CreateObjectFromURL(res) as GScrollBar; + if (_hzScrollBar == null) + Debug.LogWarning("FairyGUI: cannot create scrollbar from " + res); + else + { + _hzScrollBar.SetScrollPane(this, false); + _owner.rootContainer.AddChild(_hzScrollBar.displayObject); + } + } + } + + _scrollBarDisplayAuto = scrollBarDisplay == ScrollBarDisplayType.Auto; + if (_scrollBarDisplayAuto) + { + if (_vtScrollBar != null) + _vtScrollBar.displayObject.visible = false; + if (_hzScrollBar != null) + _hzScrollBar.displayObject.visible = false; + + _owner.rootContainer.onRollOver.Add(__rollOver); + _owner.rootContainer.onRollOut.Add(__rollOut); + } + } + else + _mouseWheelEnabled = false; + + if (Application.isPlaying) + { + if (headerRes != null) + { + _header = (GComponent)UIPackage.CreateObjectFromURL(headerRes); + if (_header == null) + Debug.LogWarning("FairyGUI: cannot create scrollPane header from " + headerRes); + } + + if (footerRes != null) + { + _footer = (GComponent)UIPackage.CreateObjectFromURL(footerRes); + if (_footer == null) + Debug.LogWarning("FairyGUI: cannot create scrollPane footer from " + footerRes); + } + + if (_header != null || _footer != null) + _refreshBarAxis = (_scrollType == ScrollType.Both || _scrollType == ScrollType.Vertical) ? 1 : 0; + } + + SetSize(owner.width, owner.height); + } + + /// + /// + /// + public void Dispose() + { + RemoveEventListeners(); + + if (_tweening != 0) + Timers.inst.Remove(_tweenUpdateDelegate); + + if (draggingPane == this) + draggingPane = null; + + _pageController = null; + + if (_hzScrollBar != null) + _hzScrollBar.Dispose(); + if (_vtScrollBar != null) + _vtScrollBar.Dispose(); + if (_header != null) + _header.Dispose(); + if (_footer != null) + _footer.Dispose(); + } + + /// + /// Dispatched when scrolling. + /// 在滚动时派发该事件。 + /// + public EventListener onScroll + { + get { return _onScroll ?? (_onScroll = new EventListener(this, "onScroll")); } + } + + /// + /// 在滚动结束时派发该事件。 + /// + public EventListener onScrollEnd + { + get { return _onScrollEnd ?? (_onScrollEnd = new EventListener(this, "onScrollEnd")); } + } + + /// + /// 向下拉过上边缘后释放则派发该事件。 + /// + public EventListener onPullDownRelease + { + get { return _onPullDownRelease ?? (_onPullDownRelease = new EventListener(this, "onPullDownRelease")); } + } + + /// + /// 向上拉过下边缘后释放则派发该事件。 + /// + public EventListener onPullUpRelease + { + get { return _onPullUpRelease ?? (_onPullUpRelease = new EventListener(this, "onPullUpRelease")); } + } + + /// + /// + /// + public GComponent owner + { + get { return _owner; } + } + + /// + /// + /// + public GScrollBar hzScrollBar + { + get { return _hzScrollBar; } + } + + /// + /// + /// + public GScrollBar vtScrollBar + { + get { return _vtScrollBar; } + } + + /// + /// + /// + public GComponent header + { + get { return _header; } + } + + /// + /// + /// + public GComponent footer + { + get { return _footer; } + } + + /// + /// 滚动到达边缘时是否允许回弹效果。 + /// + public bool bouncebackEffect + { + get { return _bouncebackEffect; } + set { _bouncebackEffect = value; } + } + + /// + /// 是否允许拖拽内容区域进行滚动。 + /// + public bool touchEffect + { + get { return _touchEffect; } + set { _touchEffect = value; } + } + + /// + /// 是否允许惯性滚动。 + /// + public bool inertiaDisabled + { + get { return _inertiaDisabled; } + set { _inertiaDisabled = value; } + } + + /// + /// 是否允许在左/上边缘显示虚化效果。 + /// + public bool softnessOnTopOrLeftSide + { + get { return _softnessOnTopOrLeftSide; } + set { _softnessOnTopOrLeftSide = value; } + } + + /// + /// 当调用ScrollPane.scrollUp/Down/Left/Right时,或者点击滚动条的上下箭头时,滑动的距离。 + /// + public float scrollStep + { + get { return _scrollStep; } + set + { + _scrollStep = value; + if (_scrollStep == 0) + _scrollStep = UIConfig.defaultScrollStep; + } + } + + /// + /// 滚动位置是否保持贴近在某个元件的边缘。 + /// + public bool snapToItem + { + get { return _snapToItem; } + set { _snapToItem = value; } + } + + /// + /// 是否页面滚动模式。 + /// + public bool pageMode + { + get { return _pageMode; } + set { _pageMode = value; } + } + + /// + /// + /// + public Controller pageController + { + get { return _pageController; } + set { _pageController = value; } + } + + /// + /// 是否允许使用鼠标滚轮进行滚动。 + /// + public bool mouseWheelEnabled + { + get { return _mouseWheelEnabled; } + set { _mouseWheelEnabled = value; } + } + + /// + /// 当处于惯性滚动时减速的速率。默认值是UIConfig.defaultScrollDecelerationRate。 + /// 越接近1,减速越慢,意味着滑动的时间和距离更长。 + /// + public float decelerationRate + { + get { return _decelerationRate; } + set { _decelerationRate = value; } + } + + /// + /// + public bool isDragged + { + get { return _dragged; } + } + + /// + /// 当前X轴滚动位置百分比,0~1(包含)。 + /// + public float percX + { + get { return _overlapSize.x == 0 ? 0 : _xPos / _overlapSize.x; } + set { SetPercX(value, false); } + } + + /// + /// 设置当前X轴滚动位置百分比,0~1(包含)。 + /// + /// + /// 是否使用缓动到达目标。 + public void SetPercX(float value, bool ani) + { + _owner.EnsureBoundsCorrect(); + SetPosX(_overlapSize.x * Mathf.Clamp01(value), ani); + } + + /// + /// 当前Y轴滚动位置百分比,0~1(包含)。 + /// + public float percY + { + get { return _overlapSize.y == 0 ? 0 : _yPos / _overlapSize.y; } + set { SetPercY(value, false); } + } + + /// + /// 设置当前Y轴滚动位置百分比,0~1(包含)。 + /// + /// + /// 是否使用缓动到达目标。 + public void SetPercY(float value, bool ani) + { + _owner.EnsureBoundsCorrect(); + SetPosY(_overlapSize.y * Mathf.Clamp01(value), ani); + } + + /// + /// 当前X轴滚动位置,值范围是viewWidth与contentWidth之差。 + /// + public float posX + { + get { return _xPos; } + set { SetPosX(value, false); } + } + + /// + /// 设置当前X轴滚动位置。 + /// + /// + /// 是否使用缓动到达目标。 + public void SetPosX(float value, bool ani) + { + _owner.EnsureBoundsCorrect(); + + if (_loop == 1) + LoopCheckingNewPos(ref value, 0); + + value = Mathf.Clamp(value, 0, _overlapSize.x); + if (value != _xPos) + { + _xPos = value; + PosChanged(ani); + } + } + + /// + /// 当前Y轴滚动位置,值范围是viewHeight与contentHeight之差。 + /// + public float posY + { + get { return _yPos; } + set { SetPosY(value, false); } + } + + /// + /// 设置当前Y轴滚动位置。 + /// + /// + /// 是否使用缓动到达目标。 + public void SetPosY(float value, bool ani) + { + _owner.EnsureBoundsCorrect(); + + if (_loop == 2) + LoopCheckingNewPos(ref value, 1); + + value = Mathf.Clamp(value, 0, _overlapSize.y); + if (value != _yPos) + { + _yPos = value; + PosChanged(ani); + } + } + + /// + /// 返回当前滚动位置是否在最下边。 + /// + public bool isBottomMost + { + get { return _yPos == _overlapSize.y || _overlapSize.y == 0; } + } + + /// + /// 返回当前滚动位置是否在最右边。 + /// + public bool isRightMost + { + get { return _xPos == _overlapSize.x || _overlapSize.x == 0; } + } + + /// + /// 如果处于分页模式,返回当前在X轴的页码。 + /// + public int currentPageX + { + get + { + if (!_pageMode) + return 0; + + int page = Mathf.FloorToInt(_xPos / _pageSize.x); + if (_xPos - page * _pageSize.x > _pageSize.x * 0.5f) + page++; + + return page; + } + set + { + if (!_pageMode) + return; + + _owner.EnsureBoundsCorrect(); + + if (_overlapSize.x > 0) + this.SetPosX(value * _pageSize.x, false); + } + } + + /// + /// 如果处于分页模式,可设置X轴的页码。 + /// + /// + /// 是否使用缓动到达目标。 + public void SetCurrentPageX(int value, bool ani) + { + if (!_pageMode) + return; + + _owner.EnsureBoundsCorrect(); + + if (_overlapSize.x > 0) + this.SetPosX(value * _pageSize.x, ani); + } + + /// + /// 如果处于分页模式,返回当前在Y轴的页码。 + /// + public int currentPageY + { + get + { + if (!_pageMode) + return 0; + + int page = Mathf.FloorToInt(_yPos / _pageSize.y); + if (_yPos - page * _pageSize.y > _pageSize.y * 0.5f) + page++; + + return page; + } + set + { + if (!_pageMode) + return; + + _owner.EnsureBoundsCorrect(); + + if (_overlapSize.y > 0) + this.SetPosY(value * _pageSize.y, false); + } + } + + /// + /// 如果处于分页模式,可设置Y轴的页码。 + /// + /// + /// 是否使用缓动到达目标。 + public void SetCurrentPageY(int value, bool ani) + { + if (!_pageMode) + return; + + _owner.EnsureBoundsCorrect(); + + if (_overlapSize.y > 0) + this.SetPosY(value * _pageSize.y, ani); + } + + /// + /// 这个值与PosX不同在于,他反映的是实时位置,而PosX在有缓动过程的情况下只是终值。 + /// + public float scrollingPosX + { + get + { + return Mathf.Clamp(-_container.x, 0, _overlapSize.x); + } + } + + /// + /// 这个值与PosY不同在于,他反映的是实时位置,而PosY在有缓动过程的情况下只是终值。 + /// + public float scrollingPosY + { + get + { + return Mathf.Clamp(-_container.y, 0, _overlapSize.y); + } + } + + /// + /// 显示内容宽度。 + /// + public float contentWidth + { + get + { + return _contentSize.x; + } + } + + /// + /// 显示内容高度。 + /// + public float contentHeight + { + get + { + return _contentSize.y; + } + } + + /// + /// 显示区域宽度。 + /// + public float viewWidth + { + get { return _viewSize.x; } + set + { + value = value + _owner.margin.left + _owner.margin.right; + if (_vtScrollBar != null && !_floating) + value += _vtScrollBar.width; + _owner.width = value; + } + } + + /// + /// 显示区域高度。 + /// + public float viewHeight + { + get { return _viewSize.y; } + set + { + value = value + _owner.margin.top + _owner.margin.bottom; + if (_hzScrollBar != null && !_floating) + value += _hzScrollBar.height; + _owner.height = value; + } + } + + /// + /// + /// + public void ScrollTop() + { + ScrollTop(false); + } + + /// + /// + /// + /// + public void ScrollTop(bool ani) + { + this.SetPercY(0, ani); + } + + /// + /// + /// + public void ScrollBottom() + { + ScrollBottom(false); + } + + /// + /// + /// + /// + public void ScrollBottom(bool ani) + { + this.SetPercY(1, ani); + } + + /// + /// + /// + public void ScrollUp() + { + ScrollUp(1, false); + } + + /// + /// + /// + /// + /// + public void ScrollUp(float ratio, bool ani) + { + if (_pageMode) + SetPosY(_yPos - _pageSize.y * ratio, ani); + else + SetPosY(_yPos - _scrollStep * ratio, ani); + } + + /// + /// + /// + public void ScrollDown() + { + ScrollDown(1, false); + } + + /// + /// + /// + /// + /// + public void ScrollDown(float ratio, bool ani) + { + if (_pageMode) + SetPosY(_yPos + _pageSize.y * ratio, ani); + else + SetPosY(_yPos + _scrollStep * ratio, ani); + } + + /// + /// + /// + public void ScrollLeft() + { + ScrollLeft(1, false); + } + + /// + /// + /// + /// + /// + public void ScrollLeft(float ratio, bool ani) + { + if (_pageMode) + SetPosX(_xPos - _pageSize.x * ratio, ani); + else + SetPosX(_xPos - _scrollStep * ratio, ani); + } + + /// + /// + /// + public void ScrollRight() + { + ScrollRight(1, false); + } + + /// + /// + /// + /// + /// + public void ScrollRight(float ratio, bool ani) + { + if (_pageMode) + SetPosX(_xPos + _pageSize.x * ratio, ani); + else + SetPosX(_xPos + _scrollStep * ratio, ani); + } + + /// + /// + /// + /// obj can be any object on stage, not limited to the direct child of this container. + public void ScrollToView(GObject obj) + { + ScrollToView(obj, false); + } + + /// + /// + /// + /// obj can be any object on stage, not limited to the direct child of this container. + /// If moving to target position with animation + public void ScrollToView(GObject obj, bool ani) + { + ScrollToView(obj, ani, false); + } + + /// + /// + /// + /// obj can be any object on stage, not limited to the direct child of this container. + /// If moving to target position with animation + /// If true, scroll to make the target on the top/left; If false, scroll to make the target any position in view. + public void ScrollToView(GObject obj, bool ani, bool setFirst) + { + _owner.EnsureBoundsCorrect(); + if (_needRefresh) + Refresh(); + + Rect rect = new Rect(obj.x, obj.y, obj.width, obj.height); + if (obj.parent != _owner) + rect = obj.parent.TransformRect(rect, _owner); + ScrollToView(rect, ani, setFirst); + } + + /// + /// + /// + /// Rect in local coordinates + /// If moving to target position with animation + /// If true, scroll to make the target on the top/left; If false, scroll to make the target any position in view. + public void ScrollToView(Rect rect, bool ani, bool setFirst) + { + _owner.EnsureBoundsCorrect(); + if (_needRefresh) + Refresh(); + + if (_overlapSize.y > 0) + { + float bottom = _yPos + _viewSize.y; + if (setFirst || rect.y <= _yPos || rect.height >= _viewSize.y) + { + if (!setFirst && rect.yMax >= bottom) //if an item size is large than viewSize, dont scroll + return; + + if (_pageMode) + this.SetPosY(Mathf.Floor(rect.y / _pageSize.y) * _pageSize.y, ani); + else + SetPosY(rect.y, ani); + } + else if (rect.yMax > bottom) + { + if (_pageMode) + this.SetPosY(Mathf.Floor(rect.y / _pageSize.y) * _pageSize.y, ani); + else if (rect.height <= _viewSize.y / 2) + SetPosY(rect.y + rect.height * 2 - _viewSize.y, ani); + else + SetPosY(rect.y + Mathf.Min(rect.height - _viewSize.y, 0), ani); + } + } + if (_overlapSize.x > 0) + { + float right = _xPos + _viewSize.x; + if (setFirst || rect.x <= _xPos || rect.width >= _viewSize.x) + { + if (!setFirst && rect.xMax >= right) //if an item size is large than viewSize, dont scroll + return; + + if (_pageMode) + this.SetPosX(Mathf.Floor(rect.x / _pageSize.x) * _pageSize.x, ani); + SetPosX(rect.x, ani); + } + else if (rect.xMax > right) + { + if (_pageMode) + this.SetPosX(Mathf.Floor(rect.x / _pageSize.x) * _pageSize.x, ani); + else if (rect.width <= _viewSize.x / 2) + SetPosX(rect.x + rect.width * 2 - _viewSize.x, ani); + else + SetPosX(rect.x + Mathf.Min(rect.width - _viewSize.x, 0), ani); + } + } + + if (!ani && _needRefresh) + Refresh(); + } + + /// + /// + /// + /// obj must be the direct child of this container + /// + public bool IsChildInView(GObject obj) + { + if (_overlapSize.y > 0) + { + float dist = obj.y + _container.y; + if (dist <= -obj.height || dist >= _viewSize.y) + return false; + } + if (_overlapSize.x > 0) + { + float dist = obj.x + _container.x; + if (dist <= -obj.width || dist >= _viewSize.x) + return false; + } + + return true; + } + + /// + /// 当滚动面板处于拖拽滚动状态或即将进入拖拽状态时,可以调用此方法停止或禁止本次拖拽。 + /// + public void CancelDragging() + { + Stage.inst.RemoveTouchMonitor(_owner.rootContainer); + + if (draggingPane == this) + draggingPane = null; + + _gestureFlag = 0; + _dragged = false; + } + + /// + /// 设置Header固定显示。如果size为0,则取消固定显示。 + /// + /// Header显示的大小 + public void LockHeader(int size) + { + if (_headerLockedSize == size) + return; + + _headerLockedSize = size; + if (!isDispatching("onPullDownRelease") && _container.xy[_refreshBarAxis] >= 0) + { + _tweenStart = _container.xy; + _tweenChange = Vector2.zero; + _tweenChange[_refreshBarAxis] = _headerLockedSize - _tweenStart[_refreshBarAxis]; + _tweenDuration = new Vector2(TWEEN_TIME_DEFAULT, TWEEN_TIME_DEFAULT); + StartTween(2); + } + } + + /// + /// 设置Footer固定显示。如果size为0,则取消固定显示。 + /// + /// + public void LockFooter(int size) + { + if (_footerLockedSize == size) + return; + + _footerLockedSize = size; + if (!isDispatching("onPullUpRelease") && _container.xy[_refreshBarAxis] <= -_overlapSize[_refreshBarAxis]) + { + _tweenStart = _container.xy; + _tweenChange = Vector2.zero; + float max = _overlapSize[_refreshBarAxis]; + if (max == 0) + max = Mathf.Max(_contentSize[_refreshBarAxis] + _footerLockedSize - _viewSize[_refreshBarAxis], 0); + else + max += _footerLockedSize; + _tweenChange[_refreshBarAxis] = -max - _tweenStart[_refreshBarAxis]; + _tweenDuration = new Vector2(TWEEN_TIME_DEFAULT, TWEEN_TIME_DEFAULT); + StartTween(2); + } + } + + internal void OnOwnerSizeChanged() + { + SetSize(_owner.width, _owner.height); + PosChanged(false); + } + + internal void HandleControllerChanged(Controller c) + { + if (_pageController == c) + { + if (_scrollType == ScrollType.Horizontal) + this.SetCurrentPageX(c.selectedIndex, true); + else + this.SetCurrentPageY(c.selectedIndex, true); + } + } + + void UpdatePageController() + { + if (_pageController != null && !_pageController.changing) + { + int index; + if (_scrollType == ScrollType.Horizontal) + index = this.currentPageX; + else + index = this.currentPageY; + if (index < _pageController.pageCount) + { + Controller c = _pageController; + _pageController = null; //防止HandleControllerChanged的调用 + c.selectedIndex = index; + _pageController = c; + } + } + } + + internal void AdjustMaskContainer() + { + float mx, my; + if (_displayOnLeft && _vtScrollBar != null && !_floating) + mx = Mathf.FloorToInt(_owner.margin.left + _vtScrollBar.width); + else + mx = _owner.margin.left; + my = _owner.margin.top; + mx += _owner._alignOffset.x; + my += _owner._alignOffset.y; + + _maskContainer.SetXY(mx, my); + } + + void SetSize(float aWidth, float aHeight) + { + AdjustMaskContainer(); + + if (_hzScrollBar != null) + { + _hzScrollBar.y = aHeight - _hzScrollBar.height; + if (_vtScrollBar != null) + { + _hzScrollBar.width = aWidth - _vtScrollBar.width - _scrollBarMargin.left - _scrollBarMargin.right; + if (_displayOnLeft) + _hzScrollBar.x = _scrollBarMargin.left + _vtScrollBar.width; + else + _hzScrollBar.x = _scrollBarMargin.left; + } + else + { + _hzScrollBar.width = aWidth - _scrollBarMargin.left - _scrollBarMargin.right; + _hzScrollBar.x = _scrollBarMargin.left; + } + } + if (_vtScrollBar != null) + { + if (!_displayOnLeft) + _vtScrollBar.x = aWidth - _vtScrollBar.width; + if (_hzScrollBar != null) + _vtScrollBar.height = aHeight - _hzScrollBar.height - _scrollBarMargin.top - _scrollBarMargin.bottom; + else + _vtScrollBar.height = aHeight - _scrollBarMargin.top - _scrollBarMargin.bottom; + _vtScrollBar.y = _scrollBarMargin.top; + } + + _viewSize.x = aWidth; + _viewSize.y = aHeight; + if (_hzScrollBar != null && !_floating) + _viewSize.y -= _hzScrollBar.height; + if (_vtScrollBar != null && !_floating) + _viewSize.x -= _vtScrollBar.width; + _viewSize.x -= (_owner.margin.left + _owner.margin.right); + _viewSize.y -= (_owner.margin.top + _owner.margin.bottom); + + _viewSize.x = Mathf.Max(1, _viewSize.x); + _viewSize.y = Mathf.Max(1, _viewSize.y); + _pageSize.x = _viewSize.x; + _pageSize.y = _viewSize.y; + + HandleSizeChanged(); + } + + internal void SetContentSize(float aWidth, float aHeight) + { + if (Mathf.Approximately(_contentSize.x, aWidth) && Mathf.Approximately(_contentSize.y, aHeight)) + return; + + _contentSize.x = aWidth; + _contentSize.y = aHeight; + HandleSizeChanged(); + } + + /// + /// 内部使用。由虚拟列表调用。在滚动时修改显示内容的大小,需要进行修正,避免滚动跳跃。 + /// + /// + /// + /// + /// + internal void ChangeContentSizeOnScrolling(float deltaWidth, float deltaHeight, float deltaPosX, float deltaPosY) + { + bool isRightmost = _xPos == _overlapSize.x; + bool isBottom = _yPos == _overlapSize.y; + + _contentSize.x += deltaWidth; + _contentSize.y += deltaHeight; + HandleSizeChanged(); + + if (_tweening == 1) + { + //如果原来滚动位置是贴边,加入处理继续贴边。 + if (deltaWidth != 0 && isRightmost && _tweenChange.x < 0) + { + _xPos = _overlapSize.x; + _tweenChange.x = -_xPos - _tweenStart.x; + } + + if (deltaHeight != 0 && isBottom && _tweenChange.y < 0) + { + _yPos = _overlapSize.y; + _tweenChange.y = -_yPos - _tweenStart.y; + } + } + else if (_tweening == 2) + { + //重新调整起始位置,确保能够顺滑滚下去 + if (deltaPosX != 0) + { + _container.x -= deltaPosX; + _tweenStart.x -= deltaPosX; + _xPos = -_container.x; + } + if (deltaPosY != 0) + { + _container.y -= deltaPosY; + _tweenStart.y -= deltaPosY; + _yPos = -_container.y; + } + } + else if (_dragged) + { + if (deltaPosX != 0) + { + _container.x -= deltaPosX; + _containerPos.x -= deltaPosX; + _xPos = -_container.x; + } + if (deltaPosY != 0) + { + _container.y -= deltaPosY; + _containerPos.y -= deltaPosY; + _yPos = -_container.y; + } + } + else + { + //如果原来滚动位置是贴边,加入处理继续贴边。 + if (deltaWidth != 0 && isRightmost) + { + _xPos = _overlapSize.x; + _container.x = -_xPos; + } + + if (deltaHeight != 0 && isBottom) + { + _yPos = _overlapSize.y; + _container.y = -_yPos; + } + } + + if (_pageMode) + UpdatePageController(); + } + + void HandleSizeChanged() + { + if (_displayInDemand) + { + _vScrollNone = _contentSize.y <= _viewSize.y; + _hScrollNone = _contentSize.x <= _viewSize.x; + + if (_vtScrollBar != null && _hzScrollBar != null) + { + if (!_hScrollNone) + _vtScrollBar.height = _owner.height - _hzScrollBar.height - _scrollBarMargin.top - _scrollBarMargin.bottom; + else + _vtScrollBar.height = _owner.height - _scrollBarMargin.top - _scrollBarMargin.bottom; + + if (!_vScrollNone) + _hzScrollBar.width = _owner.width - _vtScrollBar.width - _scrollBarMargin.left - _scrollBarMargin.right; + else + _hzScrollBar.width = _owner.width - _scrollBarMargin.left - _scrollBarMargin.right; + } + } + + if (_vtScrollBar != null) + { + if (_contentSize.y == 0) + _vtScrollBar.SetDisplayPerc(0); + else + _vtScrollBar.SetDisplayPerc(Mathf.Min(1, _viewSize.y / _contentSize.y)); + } + if (_hzScrollBar != null) + { + if (_contentSize.x == 0) + _hzScrollBar.SetDisplayPerc(0); + else + _hzScrollBar.SetDisplayPerc(Mathf.Min(1, _viewSize.x / _contentSize.x)); + } + + UpdateScrollBarVisible(); + + if (!_maskDisabled) + { + Rect rect = new Rect(-_owner._alignOffset.x, -_owner._alignOffset.y, _viewSize.x, _viewSize.y); + if (_vScrollNone && _vtScrollBar != null) + rect.width += _vtScrollBar.width; + if (_hScrollNone && _hzScrollBar != null) + rect.height += _hzScrollBar.height; + if (_dontClipMargin) + { + rect.x -= _owner.margin.left; + rect.width += (_owner.margin.left + _owner.margin.right); + rect.y -= _owner.margin.top; + rect.height += (_owner.margin.top + _owner.margin.bottom); + } + + _maskContainer.clipRect = rect; + } + + if (_scrollType == ScrollType.Horizontal || _scrollType == ScrollType.Both) + _overlapSize.x = Mathf.CeilToInt(Math.Max(0, _contentSize.x - _viewSize.x)); + else + _overlapSize.x = 0; + if (_scrollType == ScrollType.Vertical || _scrollType == ScrollType.Both) + _overlapSize.y = Mathf.CeilToInt(Math.Max(0, _contentSize.y - _viewSize.y)); + else + _overlapSize.y = 0; + + //边界检查 + _xPos = Mathf.Clamp(_xPos, 0, _overlapSize.x); + _yPos = Mathf.Clamp(_yPos, 0, _overlapSize.y); + float max = _overlapSize[_refreshBarAxis]; + if (max == 0) + max = Mathf.Max(_contentSize[_refreshBarAxis] + _footerLockedSize - _viewSize[_refreshBarAxis], 0); + else + max += _footerLockedSize; + if (_refreshBarAxis == 0) + _container.SetXY(Mathf.Clamp(_container.x, -max, _headerLockedSize), Mathf.Clamp(_container.y, -_overlapSize.y, 0)); + else + _container.SetXY(Mathf.Clamp(_container.x, -_overlapSize.x, 0), Mathf.Clamp(_container.y, -max, _headerLockedSize)); + + if (_header != null) + { + if (_refreshBarAxis == 0) + _header.height = _viewSize.y; + else + _header.width = _viewSize.x; + } + + if (_footer != null) + { + if (_refreshBarAxis == 0) + _footer.height = _viewSize.y; + else + _footer.width = _viewSize.x; + } + + UpdateScrollBarPos(); + if (_pageMode) + UpdatePageController(); + } + + private void PosChanged(bool ani) + { + //只要有1处要求不要缓动,那就不缓动 + if (_aniFlag == 0) + _aniFlag = ani ? 1 : -1; + else if (_aniFlag == 1 && !ani) + _aniFlag = -1; + + _needRefresh = true; + + UpdateContext.OnBegin -= _refreshDelegate; + UpdateContext.OnBegin += _refreshDelegate; + } + + private void Refresh() + { + _needRefresh = false; + UpdateContext.OnBegin -= _refreshDelegate; + + if (_owner.displayObject == null || _owner.displayObject.isDisposed) + return; + + if (_pageMode || _snapToItem) + { + Vector2 pos = new Vector2(-_xPos, -_yPos); + AlignPosition(ref pos, false); + _xPos = -pos.x; + _yPos = -pos.y; + } + + Refresh2(); + + _onScroll.Call(); + if (_needRefresh) //在onScroll事件里开发者可能修改位置,这里再刷新一次,避免闪烁 + { + _needRefresh = false; + UpdateContext.OnBegin -= _refreshDelegate; + + Refresh2(); + } + + UpdateScrollBarPos(); + _aniFlag = 0; + } + + void Refresh2() + { + if (_aniFlag == 1 && !_dragged) + { + Vector2 pos = new Vector2(); + + if (_overlapSize.x > 0) + pos.x = -(int)_xPos; + else + { + if (_container.x != 0) + _container.x = 0; + pos.x = 0; + } + if (_overlapSize.y > 0) + pos.y = -(int)_yPos; + else + { + if (_container.y != 0) + _container.y = 0; + pos.y = 0; + } + + if (pos.x != _container.x || pos.y != _container.y) + { + _tweenDuration = new Vector2(TWEEN_TIME_GO, TWEEN_TIME_GO); + _tweenStart = _container.xy; + _tweenChange = pos - _tweenStart; + StartTween(1); + } + else if (_tweening != 0) + KillTween(); + } + else + { + if (_tweening != 0) + KillTween(); + + _container.SetXY((int)-_xPos, (int)-_yPos); + + LoopCheckingCurrent(); + } + + if (_pageMode) + UpdatePageController(); + } + + private void __touchBegin(EventContext context) + { + if (!_touchEffect) + return; + + InputEvent evt = context.inputEvent; + if (evt.button != 0) + return; + + context.CaptureTouch(); + + Vector2 pt = _owner.GlobalToLocal(evt.position); + + if (_tweening != 0) + { + KillTween(); + Stage.inst.CancelClick(evt.touchId); + + //立刻停止惯性滚动,可能位置不对齐,设定这个标志,使touchEnd时归位 + _dragged = true; + } + else + _dragged = false; + + _containerPos = _container.xy; + _beginTouchPos = _lastTouchPos = pt; + _lastTouchGlobalPos = evt.position; + _isHoldAreaDone = false; + _velocity = Vector2.zero; + _velocityScale = 1; + _lastMoveTime = Time.unscaledTime; + } + + private void __touchMove(EventContext context) + { + if (!_touchEffect || draggingPane != null && draggingPane != this || GObject.draggingObject != null) //已经有其他拖动 + return; + + InputEvent evt = context.inputEvent; + Vector2 pt = _owner.GlobalToLocal(evt.position); + if (float.IsNaN(pt.x)) + return; + + int sensitivity; + if (Stage.touchScreen) + sensitivity = UIConfig.touchScrollSensitivity; + else + sensitivity = 8; + + float diff; + bool sv = false, sh = false; + + if (_scrollType == ScrollType.Vertical) + { + if (!_isHoldAreaDone) + { + //表示正在监测垂直方向的手势 + _gestureFlag |= 1; + + diff = Mathf.Abs(_beginTouchPos.y - pt.y); + if (diff < sensitivity) + return; + + if ((_gestureFlag & 2) != 0) //已经有水平方向的手势在监测,那么我们用严格的方式检查是不是按垂直方向移动,避免冲突 + { + float diff2 = Mathf.Abs(_beginTouchPos.x - pt.x); + if (diff < diff2) //不通过则不允许滚动了 + return; + } + } + + sv = true; + } + else if (_scrollType == ScrollType.Horizontal) + { + if (!_isHoldAreaDone) + { + _gestureFlag |= 2; + + diff = Mathf.Abs(_beginTouchPos.x - pt.x); + if (diff < sensitivity) + return; + + if ((_gestureFlag & 1) != 0) + { + float diff2 = Mathf.Abs(_beginTouchPos.y - pt.y); + if (diff < diff2) + return; + } + } + + sh = true; + } + else + { + _gestureFlag = 3; + + if (!_isHoldAreaDone) + { + diff = Mathf.Abs(_beginTouchPos.y - pt.y); + if (diff < sensitivity) + { + diff = Mathf.Abs(_beginTouchPos.x - pt.x); + if (diff < sensitivity) + return; + } + } + + sv = sh = true; + } + + Vector2 newPos = _containerPos + pt - _beginTouchPos; + newPos.x = (int)newPos.x; + newPos.y = (int)newPos.y; + + if (sv) + { + if (newPos.y > 0) + { + if (!_bouncebackEffect) + _container.y = 0; + else if (_header != null && _header.maxHeight != 0) + _container.y = (int)Mathf.Min(newPos.y * 0.5f, _header.maxHeight); + else + _container.y = (int)Mathf.Min(newPos.y * 0.5f, _viewSize.y * PULL_RATIO); + } + else if (newPos.y < -_overlapSize.y) + { + if (!_bouncebackEffect) + _container.y = -_overlapSize.y; + else if (_footer != null && _footer.maxHeight > 0) + _container.y = (int)Mathf.Max((newPos.y + _overlapSize.y) * 0.5f, -_footer.maxHeight) - _overlapSize.y; + else + _container.y = (int)Mathf.Max((newPos.y + _overlapSize.y) * 0.5f, -_viewSize.y * PULL_RATIO) - _overlapSize.y; + } + else + _container.y = newPos.y; + } + + if (sh) + { + if (newPos.x > 0) + { + if (!_bouncebackEffect) + _container.x = 0; + else if (_header != null && _header.maxWidth != 0) + _container.x = (int)Mathf.Min(newPos.x * 0.5f, _header.maxWidth); + else + _container.x = (int)Mathf.Min(newPos.x * 0.5f, _viewSize.x * PULL_RATIO); + } + else if (newPos.x < 0 - _overlapSize.x) + { + if (!_bouncebackEffect) + _container.x = -_overlapSize.x; + else if (_footer != null && _footer.maxWidth > 0) + _container.x = (int)Mathf.Max((newPos.x + _overlapSize.x) * 0.5f, -_footer.maxWidth) - _overlapSize.x; + else + _container.x = (int)Mathf.Max((newPos.x + _overlapSize.x) * 0.5f, -_viewSize.x * PULL_RATIO) - _overlapSize.x; + } + else + _container.x = newPos.x; + } + + //更新速度 + float deltaTime = Time.unscaledDeltaTime; + float elapsed = (Time.unscaledTime - _lastMoveTime) * 60 - 1; + if (elapsed > 1) //速度衰减 + _velocity = _velocity * Mathf.Pow(0.833f, elapsed); + Vector2 deltaPosition = pt - _lastTouchPos; + if (!sh) + deltaPosition.x = 0; + if (!sv) + deltaPosition.y = 0; + _velocity = Vector2.Lerp(_velocity, deltaPosition / deltaTime, deltaTime * 10); + + /*速度计算使用的是本地位移,但在后续的惯性滚动判断中需要用到屏幕位移,所以这里要记录一个位移的比例。 + *后续的处理要使用这个比例但不使用坐标转换的方法的原因是,在曲面UI等异形UI中,还无法简单地进行屏幕坐标和本地坐标的转换。 + */ + Vector2 deltaGlobalPosition = _lastTouchGlobalPos - evt.position; + if (deltaPosition.x != 0) + _velocityScale = Mathf.Abs(deltaGlobalPosition.x / deltaPosition.x); + else if (deltaPosition.y != 0) + _velocityScale = Mathf.Abs(deltaGlobalPosition.y / deltaPosition.y); + + _lastTouchPos = pt; + _lastTouchGlobalPos = evt.position; + _lastMoveTime = Time.unscaledTime; + + //同步更新pos值 + if (_overlapSize.x > 0) + _xPos = Mathf.Clamp(-_container.x, 0, _overlapSize.x); + if (_overlapSize.y > 0) + _yPos = Mathf.Clamp(-_container.y, 0, _overlapSize.y); + + //循环滚动特别检查 + if (_loop != 0) + { + newPos = _container.xy; + if (LoopCheckingCurrent()) + _containerPos += _container.xy - newPos; + } + + draggingPane = this; + _isHoldAreaDone = true; + _dragged = true; + + UpdateScrollBarPos(); + UpdateScrollBarVisible(); + if (_pageMode) + UpdatePageController(); + _onScroll.Call(); + } + + private void __touchEnd(EventContext context) + { + if (draggingPane == this) + draggingPane = null; + + _gestureFlag = 0; + + if (!_dragged || !_touchEffect) + { + _dragged = false; + return; + } + + _dragged = false; + _tweenStart = _container.xy; + + Vector2 endPos = _tweenStart; + bool flag = false; + if (_container.x > 0) + { + endPos.x = 0; + flag = true; + } + else if (_container.x < -_overlapSize.x) + { + endPos.x = -_overlapSize.x; + flag = true; + } + if (_container.y > 0) + { + endPos.y = 0; + flag = true; + } + else if (_container.y < -_overlapSize.y) + { + endPos.y = -_overlapSize.y; + flag = true; + } + + if (flag) + { + _tweenChange = endPos - _tweenStart; + if (_tweenChange.x < -UIConfig.touchDragSensitivity || _tweenChange.y < -UIConfig.touchDragSensitivity) + DispatchEvent("onPullDownRelease", null); + else if (_tweenChange.x > UIConfig.touchDragSensitivity || _tweenChange.y > UIConfig.touchDragSensitivity) + DispatchEvent("onPullUpRelease", null); + + if (_headerLockedSize > 0 && endPos[_refreshBarAxis] == 0) + { + endPos[_refreshBarAxis] = _headerLockedSize; + _tweenChange = endPos - _tweenStart; + } + else if (_footerLockedSize > 0 && endPos[_refreshBarAxis] == -_overlapSize[_refreshBarAxis]) + { + float max = _overlapSize[_refreshBarAxis]; + if (max == 0) + max = Mathf.Max(_contentSize[_refreshBarAxis] + _footerLockedSize - _viewSize[_refreshBarAxis], 0); + else + max += _footerLockedSize; + endPos[_refreshBarAxis] = -max; + _tweenChange = endPos - _tweenStart; + } + + _tweenDuration.Set(TWEEN_TIME_DEFAULT, TWEEN_TIME_DEFAULT); + } + else + { + //更新速度 + if (!_inertiaDisabled) + { + float elapsed = (Time.unscaledTime - _lastMoveTime) * 60 - 1; + if (elapsed > 1) + _velocity = _velocity * Mathf.Pow(0.833f, elapsed); + + //根据速度计算目标位置和需要时间 + endPos = UpdateTargetAndDuration(_tweenStart); + } + else + _tweenDuration.Set(TWEEN_TIME_DEFAULT, TWEEN_TIME_DEFAULT); + Vector2 oldChange = endPos - _tweenStart; + + //调整目标位置 + LoopCheckingTarget(ref endPos); + if (_pageMode || _snapToItem) + AlignPosition(ref endPos, true); + + _tweenChange = endPos - _tweenStart; + if (_tweenChange.x == 0 && _tweenChange.y == 0) + { + UpdateScrollBarVisible(); + return; + } + + //如果目标位置已调整,随之调整需要时间 + if (_pageMode || _snapToItem) + { + FixDuration(0, oldChange.x); + FixDuration(1, oldChange.y); + } + } + + StartTween(2); + } + + private void __mouseWheel(EventContext context) + { + if (!_mouseWheelEnabled) + return; + + InputEvent evt = context.inputEvent; + float delta = evt.mouseWheelDelta / Stage.devicePixelRatio; + if (_snapToItem && Mathf.Abs(delta) < 1) + delta = Mathf.Sign(delta); + + if (_overlapSize.x > 0 && _overlapSize.y == 0) + { + float step = _pageMode ? _pageSize.x : _scrollStep; + SetPosX(_xPos + step * delta, false); + } + else + { + float step = _pageMode ? _pageSize.y : _scrollStep; + SetPosY(_yPos + step * delta, false); + } + } + + private void __rollOver() + { + _hover = true; + UpdateScrollBarVisible(); + } + + private void __rollOut() + { + _hover = false; + UpdateScrollBarVisible(); + } + + internal void UpdateClipSoft() + { + Vector2 softness = _owner.clipSoftness; + if (softness.x != 0 || softness.y != 0) + { + _maskContainer.clipSoftness = new Vector4( + (_container.x >= 0 || !_softnessOnTopOrLeftSide) ? 0 : softness.x, + (_container.y >= 0 || !_softnessOnTopOrLeftSide) ? 0 : softness.y, + (-_container.x - _overlapSize.x >= 0) ? 0 : softness.x, + (-_container.y - _overlapSize.y >= 0) ? 0 : softness.y); + } + else + _maskContainer.clipSoftness = null; + } + + private void UpdateScrollBarPos() + { + if (_vtScrollBar != null) + _vtScrollBar.setScrollPerc(_overlapSize.y == 0 ? 0 : Mathf.Clamp(-_container.y, 0, _overlapSize.y) / _overlapSize.y); + + if (_hzScrollBar != null) + _hzScrollBar.setScrollPerc(_overlapSize.x == 0 ? 0 : Mathf.Clamp(-_container.x, 0, _overlapSize.x) / _overlapSize.x); + + UpdateClipSoft(); + CheckRefreshBar(); + } + + public void UpdateScrollBarVisible() + { + if (_vtScrollBar != null) + { + if (_viewSize.y <= _vtScrollBar.minSize || _vScrollNone) + _vtScrollBar.displayObject.visible = false; + else + UpdateScrollBarVisible2(_vtScrollBar); + } + + if (_hzScrollBar != null) + { + if (_viewSize.x <= _hzScrollBar.minSize || _hScrollNone) + _hzScrollBar.displayObject.visible = false; + else + UpdateScrollBarVisible2(_hzScrollBar); + } + } + + private void UpdateScrollBarVisible2(GScrollBar bar) + { + if (_scrollBarDisplayAuto) + GTween.Kill(bar, TweenPropType.Alpha, false); + + if (_scrollBarDisplayAuto && !_hover && _tweening == 0 && !_dragged && !bar.gripDragging) + { + if (bar.displayObject.visible) + GTween.To(1, 0, 0.5f).SetDelay(0.5f).OnComplete(_hideScrollBarDelegate).SetTarget(bar, TweenPropType.Alpha); + } + else + { + bar.alpha = 1; + bar.displayObject.visible = true; + } + } + + private void __barTweenComplete(GTweener tweener) + { + GObject bar = (GObject)tweener.target; + bar.alpha = 1; + bar.displayObject.visible = false; + } + + float GetLoopPartSize(float division, int axis) + { + return (_contentSize[axis] + (axis == 0 ? ((GList)_owner).columnGap : ((GList)_owner).lineGap)) / division; + } + + /// + /// 对当前的滚动位置进行循环滚动边界检查。当到达边界时,回退一半内容区域(循环滚动内容大小通常是真实内容大小的偶数倍)。 + /// + /// + bool LoopCheckingCurrent() + { + bool changed = false; + if (_loop == 1 && _overlapSize.x > 0) + { + if (_xPos < 0.001f) + { + _xPos += GetLoopPartSize(2, 0); + changed = true; + } + else if (_xPos >= _overlapSize.x) + { + _xPos -= GetLoopPartSize(2, 0); + changed = true; + } + } + else if (_loop == 2 && _overlapSize.y > 0) + { + if (_yPos < 0.001f) + { + _yPos += GetLoopPartSize(2, 1); + changed = true; + } + else if (_yPos >= _overlapSize.y) + { + _yPos -= GetLoopPartSize(2, 1); + changed = true; + } + } + + if (changed) + _container.SetXY((int)-_xPos, (int)-_yPos); + + return changed; + } + + /// + /// 对目标位置进行循环滚动边界检查。当到达边界时,回退一半内容区域(循环滚动内容大小通常是真实内容大小的偶数倍)。 + /// + /// + void LoopCheckingTarget(ref Vector2 endPos) + { + if (_loop == 1) + LoopCheckingTarget(ref endPos, 0); + + if (_loop == 2) + LoopCheckingTarget(ref endPos, 1); + } + + void LoopCheckingTarget(ref Vector2 endPos, int axis) + { + if (endPos[axis] > 0) + { + float halfSize = GetLoopPartSize(2, axis); + float tmp = _tweenStart[axis] - halfSize; + if (tmp <= 0 && tmp >= -_overlapSize[axis]) + { + endPos[axis] -= halfSize; + _tweenStart[axis] = tmp; + } + } + else if (endPos[axis] < -_overlapSize[axis]) + { + float halfSize = GetLoopPartSize(2, axis); + float tmp = _tweenStart[axis] + halfSize; + if (tmp <= 0 && tmp >= -_overlapSize[axis]) + { + endPos[axis] += halfSize; + _tweenStart[axis] = tmp; + } + } + } + + void LoopCheckingNewPos(ref float value, int axis) + { + if (_overlapSize[axis] == 0) + return; + + float pos = axis == 0 ? _xPos : _yPos; + bool changed = false; + if (value < 0.001f) + { + value += GetLoopPartSize(2, axis); + if (value > pos) + { + float v = GetLoopPartSize(6, axis); + v = Mathf.CeilToInt((value - pos) / v) * v; + pos = Mathf.Clamp(pos + v, 0, _overlapSize[axis]); + changed = true; + } + } + else if (value >= _overlapSize[axis]) + { + value -= GetLoopPartSize(2, axis); + if (value < pos) + { + float v = GetLoopPartSize(6, axis); + v = Mathf.CeilToInt((pos - value) / v) * v; + pos = Mathf.Clamp(pos - v, 0, _overlapSize[axis]); + changed = true; + } + } + + if (changed) + { + if (axis == 0) + _container.x = -(int)pos; + else + _container.y = -(int)pos; + } + } + + /// + /// 从oldPos滚动至pos,调整pos位置对齐页面、对齐item等(如果需要)。 + /// + /// + /// + void AlignPosition(ref Vector2 pos, bool inertialScrolling) + { + if (_pageMode) + { + pos.x = AlignByPage(pos.x, 0, inertialScrolling); + pos.y = AlignByPage(pos.y, 1, inertialScrolling); + } + else if (_snapToItem) + { + float tmpX = -pos.x; + float tmpY = -pos.y; + float xDir = 0; + float yDir = 0; + if (inertialScrolling) + { + xDir = pos.x - _containerPos.x; + yDir = pos.y - _containerPos.y; + } + _owner.GetSnappingPositionWithDir(ref tmpX, ref tmpY, xDir, yDir); + if (pos.x < 0 && pos.x > -_overlapSize.x) + pos.x = -tmpX; + if (pos.y < 0 && pos.y > -_overlapSize.y) + pos.y = -tmpY; + } + } + + /// + /// 从oldPos滚动至pos,调整目标位置到对齐页面。 + /// + /// + /// + /// + /// + float AlignByPage(float pos, int axis, bool inertialScrolling) + { + int page; + + if (pos > 0) + page = 0; + else if (pos < -_overlapSize[axis]) + page = Mathf.CeilToInt(_contentSize[axis] / _pageSize[axis]) - 1; + else + { + page = Mathf.FloorToInt(-pos / _pageSize[axis]); + float change = inertialScrolling ? (pos - _containerPos[axis]) : (pos - _container.xy[axis]); + float testPageSize = Mathf.Min(_pageSize[axis], _contentSize[axis] - (page + 1) * _pageSize[axis]); + float delta = -pos - page * _pageSize[axis]; + + //页面吸附策略 + if (Mathf.Abs(change) > _pageSize[axis])//如果滚动距离超过1页,则需要超过页面的一半,才能到更下一页 + { + if (delta > testPageSize * 0.5f) + page++; + } + else //否则只需要页面的1/3,当然,需要考虑到左移和右移的情况 + { + if (delta > testPageSize * (change < 0 ? UIConfig.defaultScrollPagingThreshold : (1 - UIConfig.defaultScrollPagingThreshold))) + page++; + } + + //重新计算终点 + pos = -page * _pageSize[axis]; + if (pos < -_overlapSize[axis]) //最后一页未必有pageSize那么大 + pos = -_overlapSize[axis]; + } + + //惯性滚动模式下,会增加判断尽量不要滚动超过一页 + if (inertialScrolling) + { + float oldPos = _tweenStart[axis]; + int oldPage; + if (oldPos > 0) + oldPage = 0; + else if (oldPos < -_overlapSize[axis]) + oldPage = Mathf.CeilToInt(_contentSize[axis] / _pageSize[axis]) - 1; + else + oldPage = Mathf.FloorToInt(-oldPos / _pageSize[axis]); + int startPage = Mathf.FloorToInt(-_containerPos[axis] / _pageSize[axis]); + if (Mathf.Abs(page - startPage) > 1 && Mathf.Abs(oldPage - startPage) <= 1) + { + if (page > startPage) + page = startPage + 1; + else + page = startPage - 1; + pos = -page * _pageSize[axis]; + } + } + + return pos; + } + + /// + /// 根据当前速度,计算滚动的目标位置,以及到达时间。 + /// + /// + /// + Vector2 UpdateTargetAndDuration(Vector2 orignPos) + { + Vector2 ret = Vector2.zero; + ret.x = UpdateTargetAndDuration(orignPos.x, 0); + ret.y = UpdateTargetAndDuration(orignPos.y, 1); + return ret; + } + + float UpdateTargetAndDuration(float pos, int axis) + { + float v = _velocity[axis]; + float duration = 0; + + if (pos > 0) + pos = 0; + else if (pos < -_overlapSize[axis]) + pos = -_overlapSize[axis]; + else + { + //以屏幕像素为基准 + float v2 = Mathf.Abs(v) * _velocityScale; + //在移动设备上,需要对不同分辨率做一个适配,我们的速度判断以1136分辨率为基准 + if (Stage.touchScreen) + v2 *= 1136f / Mathf.Max(Screen.width, Screen.height); + //这里有一些阈值的处理,因为在低速内,不希望产生较大的滚动(甚至不滚动) + float ratio = 0; + if (_pageMode || !Stage.touchScreen) + { + if (v2 > 500) + ratio = Mathf.Pow((v2 - 500) / 500, 2); + } + else + { + if (v2 > 1000) + ratio = Mathf.Pow((v2 - 1000) / 1000, 2); + } + + if (ratio != 0) + { + if (ratio > 1) + ratio = 1; + + v2 *= ratio; + v *= ratio; + _velocity[axis] = v; + + //算法:v*(_decelerationRate的n次幂)= 60,即在n帧后速度降为60(假设每秒60帧)。 + duration = Mathf.Log(60 / v2, _decelerationRate) / 60; + + //计算距离要使用本地速度 + //理论公式貌似滚动的距离不够,改为经验公式 + //float change = (int)((v/ 60 - 1) / (1 - _decelerationRate)); + float change = (int)(v * duration * 0.4f); + pos += change; + } + } + + if (duration < TWEEN_TIME_DEFAULT) + duration = TWEEN_TIME_DEFAULT; + _tweenDuration[axis] = duration; + + return pos; + } + + /// + /// 根据修改后的tweenChange重新计算减速时间。 + /// + void FixDuration(int axis, float oldChange) + { + if (_tweenChange[axis] == 0 || Mathf.Abs(_tweenChange[axis]) >= Mathf.Abs(oldChange)) + return; + + float newDuration = Mathf.Abs(_tweenChange[axis] / oldChange) * _tweenDuration[axis]; + if (newDuration < TWEEN_TIME_DEFAULT) + newDuration = TWEEN_TIME_DEFAULT; + + _tweenDuration[axis] = newDuration; + } + + void StartTween(int type) + { + _tweenTime.Set(0, 0); + _tweening = type; + Timers.inst.AddUpdate(_tweenUpdateDelegate); + + UpdateScrollBarVisible(); + } + + void KillTween() + { + if (_tweening == 1) //取消类型为1的tween需立刻设置到终点 + { + _container.xy = _tweenStart + _tweenChange; + _onScroll.Call(); + } + + _tweening = 0; + Timers.inst.Remove(_tweenUpdateDelegate); + + UpdateScrollBarVisible(); + + _onScrollEnd.Call(); + } + + void CheckRefreshBar() + { + if (_header == null && _footer == null) + return; + + float pos = _container.xy[_refreshBarAxis]; + if (_header != null) + { + if (pos > 0) + { + if (_header.displayObject.parent == null) + _maskContainer.AddChildAt(_header.displayObject, 0); + Vector2 vec; + + vec = _header.size; + vec[_refreshBarAxis] = pos; + _header.size = vec; + } + else + { + if (_header.displayObject.parent != null) + _maskContainer.RemoveChild(_header.displayObject); + } + } + + if (_footer != null) + { + float max = _overlapSize[_refreshBarAxis]; + if (pos < -max || max == 0 && _footerLockedSize > 0) + { + if (_footer.displayObject.parent == null) + _maskContainer.AddChildAt(_footer.displayObject, 0); + + Vector2 vec; + + vec = _footer.xy; + if (max > 0) + vec[_refreshBarAxis] = pos + _contentSize[_refreshBarAxis]; + else + vec[_refreshBarAxis] = Mathf.Max(Mathf.Min(pos + _viewSize[_refreshBarAxis], _viewSize[_refreshBarAxis] - _footerLockedSize), _viewSize[_refreshBarAxis] - _contentSize[_refreshBarAxis]); + _footer.xy = vec; + + vec = _footer.size; + if (max > 0) + vec[_refreshBarAxis] = -max - pos; + else + vec[_refreshBarAxis] = _viewSize[_refreshBarAxis] - _footer.xy[_refreshBarAxis]; + _footer.size = vec; + } + else + { + if (_footer.displayObject.parent != null) + _maskContainer.RemoveChild(_footer.displayObject); + } + } + } + + void TweenUpdate(object param) + { + if (_owner.displayObject == null || _owner.displayObject.isDisposed) + { + Timers.inst.Remove(_tweenUpdateDelegate); + return; + } + + float nx = RunTween(0); + float ny = RunTween(1); + + _container.SetXY(nx, ny); + + if (_tweening == 2) + { + if (_overlapSize.x > 0) + _xPos = Mathf.Clamp(-nx, 0, _overlapSize.x); + if (_overlapSize.y > 0) + _yPos = Mathf.Clamp(-ny, 0, _overlapSize.y); + + if (_pageMode) + UpdatePageController(); + } + + if (_tweenChange.x == 0 && _tweenChange.y == 0) + { + _tweening = 0; + Timers.inst.Remove(_tweenUpdateDelegate); + + LoopCheckingCurrent(); + + UpdateScrollBarPos(); + UpdateScrollBarVisible(); + + _onScroll.Call(); + _onScrollEnd.Call(); + } + else + { + UpdateScrollBarPos(); + _onScroll.Call(); + } + } + + float RunTween(int axis) + { + float newValue; + if (_tweenChange[axis] != 0) + { + _tweenTime[axis] += Time.unscaledDeltaTime; + if (_tweenTime[axis] >= _tweenDuration[axis]) + { + newValue = _tweenStart[axis] + _tweenChange[axis]; + _tweenChange[axis] = 0; + } + else + { + float ratio = EaseFunc(_tweenTime[axis], _tweenDuration[axis]); + newValue = _tweenStart[axis] + (int)(_tweenChange[axis] * ratio); + } + + float threshold1 = 0; + float threshold2 = -_overlapSize[axis]; + if (_headerLockedSize > 0 && _refreshBarAxis == axis) + threshold1 = _headerLockedSize; + if (_footerLockedSize > 0 && _refreshBarAxis == axis) + { + float max = _overlapSize[_refreshBarAxis]; + if (max == 0) + max = Mathf.Max(_contentSize[_refreshBarAxis] + _footerLockedSize - _viewSize[_refreshBarAxis], 0); + else + max += _footerLockedSize; + threshold2 = -max; + } + + if (_tweening == 2 && _bouncebackEffect) + { + if (newValue > 20 + threshold1 && _tweenChange[axis] > 0 + || newValue > threshold1 && _tweenChange[axis] == 0)//开始回弹 + { + _tweenTime[axis] = 0; + _tweenDuration[axis] = TWEEN_TIME_DEFAULT; + _tweenChange[axis] = -newValue + threshold1; + _tweenStart[axis] = newValue; + } + else if (newValue < threshold2 - 20 && _tweenChange[axis] < 0 + || newValue < threshold2 && _tweenChange[axis] == 0)//开始回弹 + { + _tweenTime[axis] = 0; + _tweenDuration[axis] = TWEEN_TIME_DEFAULT; + _tweenChange[axis] = threshold2 - newValue; + _tweenStart[axis] = newValue; + } + } + else + { + if (newValue > threshold1) + { + newValue = threshold1; + _tweenChange[axis] = 0; + } + else if (newValue < threshold2) + { + newValue = threshold2; + _tweenChange[axis] = 0; + } + } + } + else + newValue = _container.xy[axis]; + + return newValue; + } + + static float EaseFunc(float t, float d) + { + return (t = t / d - 1) * t * t + 1;//cubicOut + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs.meta new file mode 100644 index 0000000..71bf47c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/ScrollPane.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e51675ea70043e1488812e46428e83aa +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs new file mode 100644 index 0000000..faa957b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs @@ -0,0 +1,1771 @@ +using System; +using System.Collections.Generic; +using FairyGUI.Utils; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + public delegate void PlayCompleteCallback(); + + /// + /// + /// + public delegate void TransitionHook(); + + /// + /// + /// + public class Transition : ITweenListener + { + /// + /// 动效的名称。在编辑器里设定。 + /// + public string name { get; private set; } + + /// + /// 当你启动了自动合批,动效里有涉及到XY、大小、旋转等的改变,如果你观察到元件的显示深度在播放过程中有错误,可以开启这个选项。 + /// + public bool invalidateBatchingEveryFrame; + + GComponent _owner; + TransitionItem[] _items; + int _totalTimes; + int _totalTasks; + bool _playing; + bool _paused; + float _ownerBaseX; + float _ownerBaseY; + PlayCompleteCallback _onComplete; + int _options; + bool _reversed; + float _totalDuration; + bool _autoPlay; + int _autoPlayTimes; + float _autoPlayDelay; + float _timeScale; + bool _ignoreEngineTimeScale; + float _startTime; + float _endTime; + GTweenCallback _delayedCallDelegate; + GTweenCallback _checkAllDelegate; + GTweenCallback1 _delayedCallDelegate2; + + const int OPTION_IGNORE_DISPLAY_CONTROLLER = 1; + const int OPTION_AUTO_STOP_DISABLED = 2; + const int OPTION_AUTO_STOP_AT_END = 4; + + public Transition(GComponent owner) + { + _owner = owner; + _timeScale = 1; + _ignoreEngineTimeScale = true; + + _delayedCallDelegate = OnDelayedPlay; + _delayedCallDelegate2 = OnDelayedPlayItem; + _checkAllDelegate = CheckAllComplete; + } + + /// + /// + /// + public void Play() + { + _Play(1, 0, 0, -1, null, false); + } + + /// + /// + /// + /// + public void Play(PlayCompleteCallback onComplete) + { + _Play(1, 0, 0, -1, onComplete, false); + } + + /// + /// + /// + /// + /// + /// + public void Play(int times, float delay, PlayCompleteCallback onComplete) + { + _Play(times, delay, 0, -1, onComplete, false); + } + + /// + /// + /// + /// + /// + /// + /// + /// + public void Play(int times, float delay, float startTime, float endTime, PlayCompleteCallback onComplete) + { + _Play(times, delay, startTime, endTime, onComplete, false); + } + + /// + /// + /// + public void PlayReverse() + { + _Play(1, 0, 0, -1, null, true); + } + + /// + /// + /// + /// + public void PlayReverse(PlayCompleteCallback onComplete) + { + _Play(1, 0, 0, -1, onComplete, true); + } + + /// + /// + /// + /// + /// + /// + public void PlayReverse(int times, float delay, PlayCompleteCallback onComplete) + { + _Play(times, delay, 0, -1, onComplete, true); + } + + /// + /// + /// + /// + public void ChangePlayTimes(int value) + { + _totalTimes = value; + } + + /// + /// 设置动效是否自动播放。 + /// + /// + /// + /// + public void SetAutoPlay(bool autoPlay, int times, float delay) + { + if (_autoPlay != autoPlay) + { + _autoPlay = autoPlay; + _autoPlayTimes = times; + _autoPlayDelay = delay; + if (_autoPlay) + { + if (_owner.onStage) + Play(times, delay, null); + } + else + { + if (!_owner.onStage) + Stop(false, true); + } + } + } + + void _Play(int times, float delay, float startTime, float endTime, PlayCompleteCallback onComplete, bool reverse) + { + Stop(true, true); + + _totalTimes = times; + _reversed = reverse; + _startTime = startTime; + _endTime = endTime; + _playing = true; + _paused = false; + _onComplete = onComplete; + + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.target == null) + { + if (item.targetId.Length > 0) + item.target = _owner.GetChildById(item.targetId); + else + item.target = _owner; + } + else if (item.target != _owner && item.target.parent != _owner) //maybe removed + item.target = null; + + if (item.target != null && item.type == TransitionActionType.Transition) + { + TValue_Transition value = (TValue_Transition)item.value; + Transition trans = ((GComponent)item.target).GetTransition(value.transName); + if (trans == this) + trans = null; + if (trans != null) + { + if (value.playTimes == 0) //stop + { + int j; + for (j = i - 1; j >= 0; j--) + { + TransitionItem item2 = _items[j]; + if (item2.type == TransitionActionType.Transition) + { + TValue_Transition value2 = (TValue_Transition)item2.value; + if (value2.trans == trans) + { + value2.stopTime = item.time - item2.time; + break; + } + } + } + if (j < 0) + value.stopTime = 0; + else + trans = null; //no need to handle stop anymore + } + else + value.stopTime = -1; + } + value.trans = trans; + } + } + + if (delay == 0) + OnDelayedPlay(); + else + GTween.DelayedCall(delay).SetTarget(this).OnComplete(_delayedCallDelegate); + } + + /// + /// + /// + public void Stop() + { + Stop(true, false); + } + + /// + /// + /// + /// + /// + public void Stop(bool setToComplete, bool processCallback) + { + if (!_playing) + return; + + _playing = false; + _totalTasks = 0; + _totalTimes = 0; + PlayCompleteCallback func = _onComplete; + _onComplete = null; + + GTween.Kill(this);//delay start + + int cnt = _items.Length; + if (_reversed) + { + for (int i = cnt - 1; i >= 0; i--) + { + TransitionItem item = _items[i]; + if (item.target == null) + continue; + + StopItem(item, setToComplete); + } + } + else + { + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.target == null) + continue; + + StopItem(item, setToComplete); + } + } + + if (processCallback && func != null) + func(); + + } + + void StopItem(TransitionItem item, bool setToComplete) + { + if (item.displayLockToken != 0) + { + item.target.ReleaseDisplayLock(item.displayLockToken); + item.displayLockToken = 0; + } + + if (item.tweener != null) + { + item.tweener.Kill(setToComplete); + item.tweener = null; + + if (item.type == TransitionActionType.Shake && !setToComplete) //震动必须归位,否则下次就越震越远了。 + { + item.target._gearLocked = true; + item.target.SetXY(item.target.x - ((TValue_Shake)item.value).lastOffset.x, item.target.y - ((TValue_Shake)item.value).lastOffset.y); + item.target._gearLocked = false; + + _owner.InvalidateBatchingState(true); + } + } + + if (item.type == TransitionActionType.Transition) + { + TValue_Transition value = (TValue_Transition)item.value; + if (value.trans != null) + value.trans.Stop(setToComplete, false); + } + } + + /// + /// + /// + /// + public void SetPaused(bool paused) + { + if (!_playing || _paused == paused) + return; + + _paused = paused; + GTweener tweener = GTween.GetTween(this); + if (tweener != null) + tweener.SetPaused(paused); + + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.target == null) + continue; + + if (item.type == TransitionActionType.Transition) + { + if (((TValue_Transition)item.value).trans != null) + ((TValue_Transition)item.value).trans.SetPaused(paused); + } + else if (item.type == TransitionActionType.Animation) + { + if (paused) + { + ((TValue_Animation)item.value).flag = ((IAnimationGear)item.target).playing; + ((IAnimationGear)item.target).playing = false; + } + else + ((IAnimationGear)item.target).playing = ((TValue_Animation)item.value).flag; + } + + if (item.tweener != null) + item.tweener.SetPaused(paused); + } + } + + public void Dispose() + { + if (_playing) + GTween.Kill(this);//delay start + + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.tweener != null) + { + item.tweener.Kill(); + item.tweener = null; + } + + item.target = null; + item.hook = null; + if (item.tweenConfig != null) + item.tweenConfig.endHook = null; + } + + _playing = false; + _onComplete = null; + } + + /// + /// + /// + public bool playing + { + get { return _playing; } + } + + /// + /// transition's total duration, maybe zero when the transition only has one frame + /// + public float totalDuration + { + get { return _totalDuration; } + } + + /// + /// + /// + /// + /// + public void SetValue(string label, params object[] aParams) + { + int cnt = _items.Length; + object value; + bool found = false; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.label == label) + { + if (item.tweenConfig != null) + value = item.tweenConfig.startValue; + else + value = item.value; + found = true; + } + else if (item.tweenConfig != null && item.tweenConfig.endLabel == label) + { + value = item.tweenConfig.endValue; + found = true; + } + else + continue; + + switch (item.type) + { + case TransitionActionType.XY: + case TransitionActionType.Size: + case TransitionActionType.Pivot: + case TransitionActionType.Scale: + case TransitionActionType.Skew: + { + TValue tvalue = (TValue)value; + tvalue.b1 = true; + tvalue.b2 = true; + tvalue.f1 = Convert.ToSingle(aParams[0]); + tvalue.f2 = Convert.ToSingle(aParams[1]); + } + break; + + case TransitionActionType.Alpha: + ((TValue)value).f1 = Convert.ToSingle(aParams[0]); + break; + + case TransitionActionType.Rotation: + ((TValue)value).f1 = Convert.ToSingle(aParams[0]); + break; + + case TransitionActionType.Color: + ((TValue)value).color = (Color)aParams[0]; + break; + + case TransitionActionType.Animation: + { + TValue_Animation tvalue = (TValue_Animation)value; + tvalue.frame = Convert.ToInt32(aParams[0]); + if (aParams.Length > 1) + tvalue.playing = Convert.ToBoolean(aParams[1]); + if (aParams.Length > 2) + tvalue.animationName = (string)aParams[2]; + if (aParams.Length > 3) + tvalue.skinName = (string)aParams[3]; + } + break; + + case TransitionActionType.Visible: + ((TValue_Visible)value).visible = Convert.ToBoolean(aParams[0]); + break; + + case TransitionActionType.Sound: + { + TValue_Sound tvalue = (TValue_Sound)value; + tvalue.sound = (string)aParams[0]; + if (aParams.Length > 1) + tvalue.volume = Convert.ToSingle(aParams[1]); + } + break; + + case TransitionActionType.Transition: + { + TValue_Transition tvalue = (TValue_Transition)value; + tvalue.transName = (string)aParams[0]; + if (aParams.Length > 1) + tvalue.playTimes = Convert.ToInt32(aParams[1]); + } + break; + + case TransitionActionType.Shake: + { + ((TValue_Shake)value).amplitude = Convert.ToSingle(aParams[0]); + if (aParams.Length > 1) + ((TValue_Shake)value).duration = Convert.ToSingle(aParams[1]); + } + break; + + case TransitionActionType.ColorFilter: + { + TValue tvalue = (TValue)value; + tvalue.f1 = Convert.ToSingle(aParams[0]); + tvalue.f2 = Convert.ToSingle(aParams[1]); + tvalue.f3 = Convert.ToSingle(aParams[2]); + tvalue.f4 = Convert.ToSingle(aParams[3]); + } + break; + + case TransitionActionType.Text: + case TransitionActionType.Icon: + ((TValue_Text)value).text = (string)aParams[0]; + break; + } + } + + if (!found) + throw new Exception("label not exists"); + } + + /// + /// + /// + /// + /// + public void SetHook(string label, TransitionHook callback) + { + int cnt = _items.Length; + bool found = false; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.label == label) + { + item.hook = callback; + found = true; + break; + } + else if (item.tweenConfig != null && item.tweenConfig.endLabel == label) + { + item.tweenConfig.endHook = callback; + found = true; + break; + } + } + if (!found) + throw new Exception("label not exists"); + } + + /// + /// + /// + public void ClearHooks() + { + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + item.hook = null; + if (item.tweenConfig != null) + item.tweenConfig.endHook = null; + } + } + + /// + /// + /// + /// + /// + public void SetTarget(string label, GObject newTarget) + { + int cnt = _items.Length; + bool found = false; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.label == label) + { + item.targetId = (newTarget == _owner || newTarget == null) ? string.Empty : newTarget.id; + if (_playing) + { + if (item.targetId.Length > 0) + item.target = _owner.GetChildById(item.targetId); + else + item.target = _owner; + } + else + item.target = null; + found = true; + } + } + if (!found) + throw new Exception("label not exists"); + } + + /// + /// + /// + /// + /// + public void SetDuration(string label, float value) + { + int cnt = _items.Length; + bool found = false; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.tweenConfig != null && item.label == label) + { + item.tweenConfig.duration = value; + found = true; + } + } + + if (!found) + throw new Exception("label not exists or not a tween label"); + } + + /// + /// + /// + /// + /// + public float GetLabelTime(string label) + { + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.label == label) + return item.time; + else if (item.tweenConfig != null && item.tweenConfig.endLabel == label) + return item.time + item.tweenConfig.duration; + } + + return float.NaN; + } + + /// + /// + /// + public float timeScale + { + get { return _timeScale; } + set + { + if (_timeScale != value) + { + _timeScale = value; + + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.tweener != null) + item.tweener.SetTimeScale(value); + else if (item.type == TransitionActionType.Transition) + { + if (((TValue_Transition)item.value).trans != null) + ((TValue_Transition)item.value).trans.timeScale = value; + } + else if (item.type == TransitionActionType.Animation) + { + if (item.target != null) + ((IAnimationGear)item.target).timeScale = value; + } + } + } + } + } + + /// + /// + /// + public bool ignoreEngineTimeScale + { + get { return _ignoreEngineTimeScale; } + set + { + if (_ignoreEngineTimeScale != value) + { + _ignoreEngineTimeScale = value; + + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.tweener != null) + item.tweener.SetIgnoreEngineTimeScale(value); + else if (item.type == TransitionActionType.Transition) + { + if (((TValue_Transition)item.value).trans != null) + ((TValue_Transition)item.value).trans.ignoreEngineTimeScale = value; + } + else if (item.type == TransitionActionType.Animation) + { + if (item.target != null) + ((IAnimationGear)item.target).ignoreEngineTimeScale = value; + } + } + } + } + } + + internal void UpdateFromRelations(string targetId, float dx, float dy) + { + int cnt = _items.Length; + if (cnt == 0) + return; + + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.type == TransitionActionType.XY && item.targetId == targetId) + { + if (item.tweenConfig != null) + { + if (!item.tweenConfig.startValue.b3) + { + item.tweenConfig.startValue.f1 += dx; + item.tweenConfig.startValue.f2 += dy; + } + if (!item.tweenConfig.endValue.b3) + { + item.tweenConfig.endValue.f1 += dx; + item.tweenConfig.endValue.f2 += dy; + } + } + else + { + if (!((TValue)item.value).b3) + { + ((TValue)item.value).f1 += dx; + ((TValue)item.value).f2 += dy; + } + } + } + } + } + + internal void OnOwnerAddedToStage() + { + if (_autoPlay && !_playing) + Play(_autoPlayTimes, _autoPlayDelay, null); + } + + internal void OnOwnerRemovedFromStage() + { + if ((_options & OPTION_AUTO_STOP_DISABLED) == 0) + Stop((_options & OPTION_AUTO_STOP_AT_END) != 0 ? true : false, false); + } + + void OnDelayedPlay() + { + InternalPlay(); + + _playing = _totalTasks > 0; + if (_playing) + { + if ((_options & OPTION_IGNORE_DISPLAY_CONTROLLER) != 0) + { + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.target != null && item.target != _owner) + item.displayLockToken = item.target.AddDisplayLock(); + } + } + } + else if (_onComplete != null) + { + PlayCompleteCallback func = _onComplete; + _onComplete = null; + func(); + } + } + + void InternalPlay() + { + _ownerBaseX = _owner.x; + _ownerBaseY = _owner.y; + + _totalTasks = 1; //prevent to complete inside the loop + + bool needSkipAnimations = false; + int cnt = _items.Length; + if (!_reversed) + { + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.target == null) + continue; + + if (item.type == TransitionActionType.Animation && _startTime != 0 && item.time <= _startTime) + { + needSkipAnimations = true; + ((TValue_Animation)item.value).flag = false; + } + else + PlayItem(item); + } + } + else + { + for (int i = cnt - 1; i >= 0; i--) + { + TransitionItem item = _items[i]; + if (item.target == null) + continue; + + PlayItem(item); + } + } + + if (needSkipAnimations) + SkipAnimations(); + + _totalTasks--; + } + + void PlayItem(TransitionItem item) + { + float time; + if (item.tweenConfig != null) + { + if (_reversed) + time = (_totalDuration - item.time - item.tweenConfig.duration); + else + time = item.time; + + if (_endTime == -1 || time <= _endTime) + { + TValue startValue; + TValue endValue; + + if (_reversed) + { + startValue = item.tweenConfig.endValue; + endValue = item.tweenConfig.startValue; + } + else + { + startValue = item.tweenConfig.startValue; + endValue = item.tweenConfig.endValue; + } + + ((TValue)item.value).b1 = startValue.b1 || endValue.b1; + ((TValue)item.value).b2 = startValue.b2 || endValue.b2; + + switch (item.type) + { + case TransitionActionType.XY: + case TransitionActionType.Size: + case TransitionActionType.Scale: + case TransitionActionType.Skew: + item.tweener = GTween.To(startValue.vec2, endValue.vec2, item.tweenConfig.duration); + break; + + case TransitionActionType.Alpha: + case TransitionActionType.Rotation: + item.tweener = GTween.To(startValue.f1, endValue.f1, item.tweenConfig.duration); + break; + + case TransitionActionType.Color: + item.tweener = GTween.To(startValue.color, endValue.color, item.tweenConfig.duration); + break; + + case TransitionActionType.ColorFilter: + item.tweener = GTween.To(startValue.vec4, endValue.vec4, item.tweenConfig.duration); + break; + } + + item.tweener.SetDelay(time) + .SetEase(item.tweenConfig.easeType, item.tweenConfig.customEase) + .SetRepeat(item.tweenConfig.repeat, item.tweenConfig.yoyo) + .SetTimeScale(_timeScale) + .SetIgnoreEngineTimeScale(_ignoreEngineTimeScale) + .SetTarget(item) + .SetListener(this); + + if (_endTime >= 0) + item.tweener.SetBreakpoint(_endTime - time); + + _totalTasks++; + } + } + else if (item.type == TransitionActionType.Shake) + { + TValue_Shake value = (TValue_Shake)item.value; + + if (_reversed) + time = (_totalDuration - item.time - value.duration); + else + time = item.time; + + if (_endTime == -1 || time <= _endTime) + { + value.lastOffset.Set(0, 0); + value.offset.Set(0, 0); + item.tweener = GTween.Shake(Vector3.zero, value.amplitude, value.duration) + .SetDelay(time) + .SetTimeScale(_timeScale) + .SetIgnoreEngineTimeScale(_ignoreEngineTimeScale) + .SetTarget(item) + .SetListener(this); + + if (_endTime >= 0) + item.tweener.SetBreakpoint(_endTime - item.time); + + _totalTasks++; + } + } + else + { + if (_reversed) + time = (_totalDuration - item.time); + else + time = item.time; + + if (time <= _startTime) + { + ApplyValue(item); + CallHook(item, false); + } + else if (_endTime == -1 || time <= _endTime) + { + _totalTasks++; + item.tweener = GTween.DelayedCall(time) + .SetTimeScale(_timeScale) + .SetIgnoreEngineTimeScale(_ignoreEngineTimeScale) + .SetTarget(item) + .OnComplete(_delayedCallDelegate2); + } + } + + if (item.tweener != null) + item.tweener.Seek(_startTime); + } + + void SkipAnimations() + { + int frame; + float playStartTime; + float playTotalTime; + TValue_Animation value; + IAnimationGear target; + TransitionItem item; + + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + item = _items[i]; + if (item.type != TransitionActionType.Animation || item.time > _startTime) + continue; + + value = (TValue_Animation)item.value; + if (value.flag) + continue; + + target = (IAnimationGear)item.target; + frame = target.frame; + playStartTime = target.playing ? 0 : -1; + playTotalTime = 0; + + for (int j = i; j < cnt; j++) + { + item = _items[j]; + if (item.type != TransitionActionType.Animation || item.target != target || item.time > _startTime) + continue; + + value = (TValue_Animation)item.value; + value.flag = true; + + if (value.frame != -1) + { + frame = value.frame; + if (value.playing) + playStartTime = item.time; + else + playStartTime = -1; + playTotalTime = 0; + } + else + { + if (value.playing) + { + if (playStartTime < 0) + playStartTime = item.time; + } + else + { + if (playStartTime >= 0) + playTotalTime += (item.time - playStartTime); + playStartTime = -1; + } + } + + CallHook(item, false); + } + + if (playStartTime >= 0) + playTotalTime += (_startTime - playStartTime); + + target.playing = playStartTime >= 0; + target.frame = frame; + if (playTotalTime > 0) + target.Advance(playTotalTime); + } + } + + void OnDelayedPlayItem(GTweener tweener) + { + TransitionItem item = (TransitionItem)tweener.target; + item.tweener = null; + _totalTasks--; + + ApplyValue(item); + CallHook(item, false); + + CheckAllComplete(); + } + + public void OnTweenStart(GTweener tweener) + { + TransitionItem item = (TransitionItem)tweener.target; + + if (item.type == TransitionActionType.XY || item.type == TransitionActionType.Size) //位置和大小要到start才最终确认起始值 + { + TValue startValue; + TValue endValue; + + if (_reversed) + { + startValue = item.tweenConfig.endValue; + endValue = item.tweenConfig.startValue; + } + else + { + startValue = item.tweenConfig.startValue; + endValue = item.tweenConfig.endValue; + } + + if (item.type == TransitionActionType.XY) + { + if (item.target != _owner) + { + if (!startValue.b1) + tweener.startValue.x = item.target.x; + else if (startValue.b3) //percent + tweener.startValue.x = startValue.f1 * _owner.width; + + if (!startValue.b2) + tweener.startValue.y = item.target.y; + else if (startValue.b3) //percent + tweener.startValue.y = startValue.f2 * _owner.height; + + if (!endValue.b1) + tweener.endValue.x = tweener.startValue.x; + else if (endValue.b3) + tweener.endValue.x = endValue.f1 * _owner.width; + + if (!endValue.b2) + tweener.endValue.y = tweener.startValue.y; + else if (endValue.b3) + tweener.endValue.y = endValue.f2 * _owner.height; + } + else + { + if (!startValue.b1) + tweener.startValue.x = item.target.x - _ownerBaseX; + if (!startValue.b2) + tweener.startValue.y = item.target.y - _ownerBaseY; + + if (!endValue.b1) + tweener.endValue.x = tweener.startValue.x; + if (!endValue.b2) + tweener.endValue.y = tweener.startValue.y; + } + } + else + { + if (!startValue.b1) + tweener.startValue.x = item.target.width; + if (!startValue.b2) + tweener.startValue.y = item.target.height; + + if (!endValue.b1) + tweener.endValue.x = tweener.startValue.x; + if (!endValue.b2) + tweener.endValue.y = tweener.startValue.y; + } + + if (item.tweenConfig.path != null) + { + ((TValue)item.value).b1 = ((TValue)item.value).b2 = true; + tweener.SetPath(item.tweenConfig.path); + } + } + + CallHook(item, false); + } + + public void OnTweenUpdate(GTweener tweener) + { + TransitionItem item = (TransitionItem)tweener.target; + switch (item.type) + { + case TransitionActionType.XY: + case TransitionActionType.Size: + case TransitionActionType.Scale: + case TransitionActionType.Skew: + ((TValue)item.value).vec2 = tweener.value.vec2; + if (item.tweenConfig.path != null) + { + ((TValue)item.value).f1 += tweener.startValue.x; + ((TValue)item.value).f2 += tweener.startValue.y; + } + break; + + case TransitionActionType.Alpha: + case TransitionActionType.Rotation: + ((TValue)item.value).f1 = tweener.value.x; + break; + + case TransitionActionType.Color: + ((TValue)item.value).color = tweener.value.color; + break; + + case TransitionActionType.ColorFilter: + ((TValue)item.value).vec4 = tweener.value.vec4; + break; + + case TransitionActionType.Shake: + ((TValue_Shake)item.value).offset = tweener.deltaValue.vec2; + break; + } + ApplyValue(item); + } + + public void OnTweenComplete(GTweener tweener) + { + TransitionItem item = (TransitionItem)tweener.target; + item.tweener = null; + _totalTasks--; + + if (tweener.allCompleted) //当整体播放结束时间在这个tween的中间时不应该调用结尾钩子 + CallHook(item, true); + + CheckAllComplete(); + } + + void OnPlayTransCompleted(TransitionItem item) + { + _totalTasks--; + + CheckAllComplete(); + } + + void CallHook(TransitionItem item, bool tweenEnd) + { + if (tweenEnd) + { + if (item.tweenConfig != null && item.tweenConfig.endHook != null) + item.tweenConfig.endHook(); + } + else + { + if (item.time >= _startTime && item.hook != null) + item.hook(); + } + } + + void CheckAllComplete() + { + if (_playing && _totalTasks == 0) + { + if (_totalTimes < 0) + { + InternalPlay(); + if (_totalTasks == 0) + GTween.DelayedCall(0).SetTarget(this).OnComplete(_checkAllDelegate); + } + else + { + _totalTimes--; + if (_totalTimes > 0) + { + InternalPlay(); + if (_totalTasks == 0) + GTween.DelayedCall(0).SetTarget(this).OnComplete(_checkAllDelegate); + } + else + { + _playing = false; + + int cnt = _items.Length; + for (int i = 0; i < cnt; i++) + { + TransitionItem item = _items[i]; + if (item.target != null && item.displayLockToken != 0) + { + item.target.ReleaseDisplayLock(item.displayLockToken); + item.displayLockToken = 0; + } + } + + if (_onComplete != null) + { + PlayCompleteCallback func = _onComplete; + _onComplete = null; + func(); + } + } + } + } + } + + void ApplyValue(TransitionItem item) + { + item.target._gearLocked = true; + + switch (item.type) + { + case TransitionActionType.XY: + { + TValue value = (TValue)item.value; + if (item.target == _owner) + { + if (value.b1 && value.b2) + item.target.SetXY(value.f1 + _ownerBaseX, value.f2 + _ownerBaseY); + else if (value.b1) + item.target.x = value.f1 + _ownerBaseX; + else + item.target.y = value.f2 + _ownerBaseY; + } + else + { + if (value.b3) //position in percent + { + if (value.b1 && value.b2) + item.target.SetXY(value.f1 * _owner.width, value.f2 * _owner.height); + else if (value.b1) + item.target.x = value.f1 * _owner.width; + else if (value.b2) + item.target.y = value.f2 * _owner.height; + } + else + { + if (value.b1 && value.b2) + item.target.SetXY(value.f1, value.f2); + else if (value.b1) + item.target.x = value.f1; + else if (value.b2) + item.target.y = value.f2; + } + } + if (invalidateBatchingEveryFrame) + _owner.InvalidateBatchingState(true); + } + break; + + case TransitionActionType.Size: + { + TValue value = (TValue)item.value; + if (!value.b1) + value.f1 = item.target.width; + if (!value.b2) + value.f2 = item.target.height; + item.target.SetSize(value.f1, value.f2); + if (invalidateBatchingEveryFrame) + _owner.InvalidateBatchingState(true); + } + break; + + case TransitionActionType.Pivot: + item.target.SetPivot(((TValue)item.value).f1, ((TValue)item.value).f2, item.target.pivotAsAnchor); + if (invalidateBatchingEveryFrame) + _owner.InvalidateBatchingState(true); + break; + + case TransitionActionType.Alpha: + item.target.alpha = ((TValue)item.value).f1; + break; + + case TransitionActionType.Rotation: + item.target.rotation = ((TValue)item.value).f1; + if (invalidateBatchingEveryFrame) + _owner.InvalidateBatchingState(true); + break; + + case TransitionActionType.Scale: + item.target.SetScale(((TValue)item.value).f1, ((TValue)item.value).f2); + if (invalidateBatchingEveryFrame) + _owner.InvalidateBatchingState(true); + break; + + case TransitionActionType.Skew: + item.target.skew = ((TValue)item.value).vec2; + if (invalidateBatchingEveryFrame) + _owner.InvalidateBatchingState(true); + break; + + case TransitionActionType.Color: + ((IColorGear)item.target).color = ((TValue)item.value).color; + break; + + case TransitionActionType.Animation: + { + TValue_Animation value = (TValue_Animation)item.value; + if (value.frame >= 0) + ((IAnimationGear)item.target).frame = value.frame; + ((IAnimationGear)item.target).playing = value.playing; + ((IAnimationGear)item.target).timeScale = _timeScale; + ((IAnimationGear)item.target).ignoreEngineTimeScale = _ignoreEngineTimeScale; + if (value.animationName != null) + ((GLoader3D)item.target).animationName = value.animationName; + if (value.skinName != null) + ((GLoader3D)item.target).skinName = value.skinName; + } + break; + + case TransitionActionType.Visible: + item.target.visible = ((TValue_Visible)item.value).visible; + break; + + case TransitionActionType.Shake: + { + TValue_Shake value = (TValue_Shake)item.value; + item.target.SetXY(item.target.x - value.lastOffset.x + value.offset.x, item.target.y - value.lastOffset.y + value.offset.y); + value.lastOffset = value.offset; + + if (invalidateBatchingEveryFrame) + _owner.InvalidateBatchingState(true); + } + break; + + case TransitionActionType.Transition: + if (_playing) + { + TValue_Transition value = (TValue_Transition)item.value; + if (value.trans != null) + { + _totalTasks++; + + float startTime = _startTime > item.time ? (_startTime - item.time) : 0; + float endTime = _endTime >= 0 ? (_endTime - item.time) : -1; + if (value.stopTime >= 0 && (endTime < 0 || endTime > value.stopTime)) + endTime = value.stopTime; + value.trans.timeScale = _timeScale; + value.trans.ignoreEngineTimeScale = _ignoreEngineTimeScale; + value.trans._Play(value.playTimes, 0, startTime, endTime, value.playCompleteDelegate, _reversed); + } + } + break; + + case TransitionActionType.Sound: + if (_playing && item.time >= _startTime) + { + TValue_Sound value = (TValue_Sound)item.value; + if (value.audioClip == null) + { + if (UIConfig.soundLoader == null || value.sound.StartsWith(UIPackage.URL_PREFIX)) + value.audioClip = UIPackage.GetItemAssetByURL(value.sound) as NAudioClip; + else + value.audioClip = UIConfig.soundLoader(value.sound); + } + + if (value.audioClip != null && value.audioClip.nativeClip != null) + Stage.inst.PlayOneShotSound(value.audioClip.nativeClip, value.volume); + } + break; + + case TransitionActionType.ColorFilter: + { + TValue value = (TValue)item.value; + ColorFilter cf = item.target.filter as ColorFilter; + if (cf == null) + { + cf = new ColorFilter(); + item.target.filter = cf; + } + else + cf.Reset(); + + cf.AdjustBrightness(value.f1); + cf.AdjustContrast(value.f2); + cf.AdjustSaturation(value.f3); + cf.AdjustHue(value.f4); + } + break; + + case TransitionActionType.Text: + item.target.text = ((TValue_Text)item.value).text; + break; + + case TransitionActionType.Icon: + item.target.icon = ((TValue_Text)item.value).text; + break; + } + + item.target._gearLocked = false; + } + + public void Setup(ByteBuffer buffer) + { + this.name = buffer.ReadS(); + _options = buffer.ReadInt(); + _autoPlay = buffer.ReadBool(); + _autoPlayTimes = buffer.ReadInt(); + _autoPlayDelay = buffer.ReadFloat(); + + int cnt = buffer.ReadShort(); + _items = new TransitionItem[cnt]; + for (int i = 0; i < cnt; i++) + { + int dataLen = buffer.ReadShort(); + int curPos = buffer.position; + + buffer.Seek(curPos, 0); + + TransitionItem item = new TransitionItem((TransitionActionType)buffer.ReadByte()); + _items[i] = item; + + item.time = buffer.ReadFloat(); + int targetId = buffer.ReadShort(); + if (targetId < 0) + item.targetId = string.Empty; + else + item.targetId = _owner.GetChildAt(targetId).id; + item.label = buffer.ReadS(); + + if (buffer.ReadBool()) + { + buffer.Seek(curPos, 1); + + item.tweenConfig = new TweenConfig(); + item.tweenConfig.duration = buffer.ReadFloat(); + if (item.time + item.tweenConfig.duration > _totalDuration) + _totalDuration = item.time + item.tweenConfig.duration; + item.tweenConfig.easeType = (EaseType)buffer.ReadByte(); + item.tweenConfig.repeat = buffer.ReadInt(); + item.tweenConfig.yoyo = buffer.ReadBool(); + item.tweenConfig.endLabel = buffer.ReadS(); + + buffer.Seek(curPos, 2); + + DecodeValue(item, buffer, item.tweenConfig.startValue); + + buffer.Seek(curPos, 3); + + DecodeValue(item, buffer, item.tweenConfig.endValue); + + if (buffer.version >= 2) + { + var pts = buffer.ReadPath(); + if (pts.Count > 0) + { + item.tweenConfig.path = new GPath(); + item.tweenConfig.path.Create(pts); + } + } + + if (buffer.version >= 4 && item.tweenConfig.easeType == EaseType.Custom) + { + var pts = buffer.ReadPath(); + if (pts.Count > 0) + { + item.tweenConfig.customEase = new CustomEase(); + item.tweenConfig.customEase.Create(pts); + } + } + } + else + { + if (item.time > _totalDuration) + _totalDuration = item.time; + + buffer.Seek(curPos, 2); + + DecodeValue(item, buffer, item.value); + } + + buffer.position = curPos + dataLen; + } + } + + void DecodeValue(TransitionItem item, ByteBuffer buffer, object value) + { + switch (item.type) + { + case TransitionActionType.XY: + case TransitionActionType.Size: + case TransitionActionType.Pivot: + case TransitionActionType.Skew: + { + TValue tvalue = (TValue)value; + tvalue.b1 = buffer.ReadBool(); + tvalue.b2 = buffer.ReadBool(); + tvalue.f1 = buffer.ReadFloat(); + tvalue.f2 = buffer.ReadFloat(); + + if (buffer.version >= 2 && item.type == TransitionActionType.XY) + tvalue.b3 = buffer.ReadBool(); //percent + } + break; + + case TransitionActionType.Alpha: + case TransitionActionType.Rotation: + ((TValue)value).f1 = buffer.ReadFloat(); + break; + + case TransitionActionType.Scale: + ((TValue)value).f1 = buffer.ReadFloat(); + ((TValue)value).f2 = buffer.ReadFloat(); + break; + + case TransitionActionType.Color: + ((TValue)value).color = buffer.ReadColor(); + break; + + case TransitionActionType.Animation: + ((TValue_Animation)value).playing = buffer.ReadBool(); + ((TValue_Animation)value).frame = buffer.ReadInt(); + if (buffer.version >= 6) + { + ((TValue_Animation)value).animationName = buffer.ReadS(); + ((TValue_Animation)value).skinName = buffer.ReadS(); + } + break; + + case TransitionActionType.Visible: + ((TValue_Visible)value).visible = buffer.ReadBool(); + break; + + case TransitionActionType.Sound: + ((TValue_Sound)value).sound = buffer.ReadS(); + ((TValue_Sound)value).volume = buffer.ReadFloat(); + break; + + case TransitionActionType.Transition: + ((TValue_Transition)value).transName = buffer.ReadS(); + ((TValue_Transition)value).playTimes = buffer.ReadInt(); + ((TValue_Transition)value).playCompleteDelegate = () => { OnPlayTransCompleted(item); }; + break; + + case TransitionActionType.Shake: + ((TValue_Shake)value).amplitude = buffer.ReadFloat(); + ((TValue_Shake)value).duration = buffer.ReadFloat(); + break; + + case TransitionActionType.ColorFilter: + { + TValue tvalue = (TValue)value; + tvalue.f1 = buffer.ReadFloat(); + tvalue.f2 = buffer.ReadFloat(); + tvalue.f3 = buffer.ReadFloat(); + tvalue.f4 = buffer.ReadFloat(); + } + break; + + case TransitionActionType.Text: + case TransitionActionType.Icon: + ((TValue_Text)value).text = buffer.ReadS(); + break; + } + } + } + + class TransitionItem + { + public float time; + public string targetId; + public TransitionActionType type; + public TweenConfig tweenConfig; + public string label; + public object value; + public TransitionHook hook; + + //running properties + public GTweener tweener; + public GObject target; + public uint displayLockToken; + + public TransitionItem(TransitionActionType type) + { + this.type = type; + + switch (type) + { + case TransitionActionType.XY: + case TransitionActionType.Size: + case TransitionActionType.Scale: + case TransitionActionType.Pivot: + case TransitionActionType.Skew: + case TransitionActionType.Alpha: + case TransitionActionType.Rotation: + case TransitionActionType.Color: + case TransitionActionType.ColorFilter: + value = new TValue(); + break; + + case TransitionActionType.Animation: + value = new TValue_Animation(); + break; + + case TransitionActionType.Shake: + value = new TValue_Shake(); + break; + + case TransitionActionType.Sound: + value = new TValue_Sound(); + break; + + case TransitionActionType.Transition: + value = new TValue_Transition(); + break; + + case TransitionActionType.Visible: + value = new TValue_Visible(); + break; + + case TransitionActionType.Text: + case TransitionActionType.Icon: + value = new TValue_Text(); + break; + } + } + } + + class TweenConfig + { + public float duration; + public EaseType easeType; + public CustomEase customEase; + public int repeat; + public bool yoyo; + + public TValue startValue; + public TValue endValue; + + public string endLabel; + public TransitionHook endHook; + + public GPath path; + + public TweenConfig() + { + easeType = EaseType.QuadOut; + startValue = new TValue(); + endValue = new TValue(); + } + } + + class TValue_Visible + { + public bool visible; + } + + class TValue_Animation + { + public int frame; + public bool playing; + public bool flag; + public string animationName; + public string skinName; + } + + class TValue_Sound + { + public string sound; + public float volume; + public NAudioClip audioClip; + } + + class TValue_Transition + { + public string transName; + public int playTimes; + public Transition trans; + public PlayCompleteCallback playCompleteDelegate; + public float stopTime; + } + + class TValue_Shake + { + public float amplitude; + public float duration; + public Vector2 lastOffset; + public Vector2 offset; + } + + class TValue_Text + { + public string text; + } + + class TValue + { + public float f1; + public float f2; + public float f3; + public float f4; + public bool b1; + public bool b2; + public bool b3; + + public TValue() + { + b1 = true; + b2 = true; + } + + public void Copy(TValue source) + { + this.f1 = source.f1; + this.f2 = source.f2; + this.f3 = source.f3; + this.f4 = source.f4; + this.b1 = source.b1; + this.b2 = source.b2; + } + + public Vector2 vec2 + { + get { return new Vector2(f1, f2); } + set + { + f1 = value.x; + f2 = value.y; + } + } + + public Vector4 vec4 + { + get { return new Vector4(f1, f2, f3, f4); } + set + { + f1 = value.x; + f2 = value.y; + f3 = value.z; + f4 = value.w; + } + } + + public Color color + { + get { return new Color(f1, f2, f3, f4); } + set + { + f1 = value.r; + f2 = value.g; + f3 = value.b; + f4 = value.a; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs.meta new file mode 100644 index 0000000..05e4b3e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Transition.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5b4b16745502a0a428467b2981a2a786 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs b/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs new file mode 100644 index 0000000..1b441fe --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs @@ -0,0 +1,253 @@ +using System.Collections.Generic; +using FairyGUI.Utils; + +namespace FairyGUI +{ + public class TranslationHelper + { + public static Dictionary> strings; + + public static void LoadFromXML(XML source) + { + strings = new Dictionary>(); + XMLList.Enumerator et = source.GetEnumerator("string"); + while (et.MoveNext()) + { + XML cxml = et.Current; + string key = cxml.GetAttribute("name"); + string text = cxml.text; + int i = key.IndexOf("-"); + if (i == -1) + continue; + + string key2 = key.Substring(0, i); + string key3 = key.Substring(i + 1); + Dictionary col; + if (!strings.TryGetValue(key2, out col)) + { + col = new Dictionary(); + strings[key2] = col; + } + col[key3] = text; + } + } + + public static void TranslateComponent(PackageItem item) + { + if (TranslationHelper.strings == null) + return; + + Dictionary strings; + if (!TranslationHelper.strings.TryGetValue(item.owner.id + item.id, out strings)) + return; + + string elementId, value; + ByteBuffer buffer = item.rawData; + + buffer.Seek(0, 2); + + int childCount = buffer.ReadShort(); + for (int i = 0; i < childCount; i++) + { + int dataLen = buffer.ReadShort(); + int curPos = buffer.position; + + buffer.Seek(curPos, 0); + + ObjectType baseType = (ObjectType)buffer.ReadByte(); + ObjectType type = baseType; + buffer.Skip(4); + elementId = buffer.ReadS(); + + if (type == ObjectType.Component) + { + if (buffer.Seek(curPos, 6)) + type = (ObjectType)buffer.ReadByte(); + } + + buffer.Seek(curPos, 1); + + if (strings.TryGetValue(elementId + "-tips", out value)) + buffer.WriteS(value); + + buffer.Seek(curPos, 2); + + int gearCnt = buffer.ReadShort(); + for (int j = 0; j < gearCnt; j++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + if (buffer.ReadByte() == 6) //gearText + { + buffer.Skip(2);//controller + int valueCnt = buffer.ReadShort(); + for (int k = 0; k < valueCnt; k++) + { + string page = buffer.ReadS(); + if (page != null) + { + if (strings.TryGetValue(elementId + "-texts_" + k, out value)) + buffer.WriteS(value); + else + buffer.Skip(2); + } + } + + if (buffer.ReadBool() && strings.TryGetValue(elementId + "-texts_def", out value)) + buffer.WriteS(value); + } + + buffer.position = nextPos; + } + + if (baseType == ObjectType.Component && buffer.version >= 2) + { + buffer.Seek(curPos, 4); + + buffer.Skip(2); //pageController + + buffer.Skip(4 * buffer.ReadShort()); + + int cpCount = buffer.ReadShort(); + for (int k = 0; k < cpCount; k++) + { + string target = buffer.ReadS(); + int propertyId = buffer.ReadShort(); + if (propertyId == 0 && strings.TryGetValue(elementId + "-cp-" + target, out value)) + buffer.WriteS(value); + else + buffer.Skip(2); + } + } + + switch (type) + { + case ObjectType.Text: + case ObjectType.RichText: + case ObjectType.InputText: + { + if (strings.TryGetValue(elementId, out value)) + { + buffer.Seek(curPos, 6); + buffer.WriteS(value); + } + if (strings.TryGetValue(elementId + "-prompt", out value)) + { + buffer.Seek(curPos, 4); + buffer.WriteS(value); + } + break; + } + + case ObjectType.List: + case ObjectType.Tree: + { + buffer.Seek(curPos, 8); + buffer.Skip(2); + int itemCount = buffer.ReadShort(); + for (int j = 0; j < itemCount; j++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + buffer.Skip(2); //url + if (type == ObjectType.Tree) + buffer.Skip(2); + + //title + if (strings.TryGetValue(elementId + "-" + j, out value)) + buffer.WriteS(value); + else + buffer.Skip(2); + + //selected title + if (strings.TryGetValue(elementId + "-" + j + "-0", out value)) + buffer.WriteS(value); + else + buffer.Skip(2); + + if (buffer.version >= 2) + { + buffer.Skip(6); + buffer.Skip(buffer.ReadShort() * 4);//controllers + + int cpCount = buffer.ReadShort(); + for (int k = 0; k < cpCount; k++) + { + string target = buffer.ReadS(); + int propertyId = buffer.ReadShort(); + if (propertyId == 0 && strings.TryGetValue(elementId + "-" + j + "-" + target, out value)) + buffer.WriteS(value); + else + buffer.Skip(2); + } + } + + buffer.position = nextPos; + } + break; + } + + case ObjectType.Label: + { + if (buffer.Seek(curPos, 6) && (ObjectType)buffer.ReadByte() == type) + { + if (strings.TryGetValue(elementId, out value)) + buffer.WriteS(value); + else + buffer.Skip(2); + + buffer.Skip(2); + if (buffer.ReadBool()) + buffer.Skip(4); + buffer.Skip(4); + if (buffer.ReadBool() && strings.TryGetValue(elementId + "-prompt", out value)) + buffer.WriteS(value); + } + break; + } + + case ObjectType.Button: + { + if (buffer.Seek(curPos, 6) && (ObjectType)buffer.ReadByte() == type) + { + if (strings.TryGetValue(elementId, out value)) + buffer.WriteS(value); + else + buffer.Skip(2); + if (strings.TryGetValue(elementId + "-0", out value)) + buffer.WriteS(value); + } + break; + } + + case ObjectType.ComboBox: + { + if (buffer.Seek(curPos, 6) && (ObjectType)buffer.ReadByte() == type) + { + int itemCount = buffer.ReadShort(); + for (int j = 0; j < itemCount; j++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + if (strings.TryGetValue(elementId + "-" + j, out value)) + buffer.WriteS(value); + + buffer.position = nextPos; + } + + if (strings.TryGetValue(elementId, out value)) + buffer.WriteS(value); + } + + break; + } + } + + buffer.position = curPos + dataLen; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs.meta new file mode 100644 index 0000000..5f66f49 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/TranslationHelper.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 3efa1901e4c7ea44d9573c70d21e49f5 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Tree.meta new file mode 100644 index 0000000..a011b0b --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Tree.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4e3a2d82c02599a4f926286440678b58 +folderAsset: yes +timeCreated: 1467555752 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs new file mode 100644 index 0000000..686ddfd --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs @@ -0,0 +1,348 @@ +using System; +using System.Collections.Generic; + +namespace FairyGUI +{ + /// + /// + /// + [Obsolete("Use GTree and GTreeNode instead")] + public class TreeNode + { + /// + /// + /// + public object data; + + /// + /// + /// + public TreeNode parent { get; private set; } + + /// + /// + /// + public TreeView tree { get; private set; } + + /// + /// + /// + public GComponent cell { get; internal set; } + + /// + /// + /// + public int level { get; private set; } + + private List _children; + private bool _expanded; + + /// + /// + /// + /// + public TreeNode(bool hasChild) + { + if (hasChild) + _children = new List(); + } + + /// + /// + /// + public bool expanded + { + get + { + return _expanded; + } + + set + { + if (_children == null) + return; + + if (_expanded != value) + { + _expanded = value; + if (tree != null) + { + if (_expanded) + tree.AfterExpanded(this); + else + tree.AfterCollapsed(this); + } + } + } + } + + /// + /// + /// + public bool isFolder + { + get { return _children != null; } + } + + /// + /// + /// + public string text + { + get + { + if (cell != null) + return cell.text; + else + return null; + } + } + + /// + /// + /// + /// + /// + public TreeNode AddChild(TreeNode child) + { + AddChildAt(child, _children.Count); + return child; + } + + /// + /// + /// + /// + /// + /// + public TreeNode AddChildAt(TreeNode child, int index) + { + if (child == null) + throw new Exception("child is null"); + + int numChildren = _children.Count; + + if (index >= 0 && index <= numChildren) + { + if (child.parent == this) + { + SetChildIndex(child, index); + } + else + { + if (child.parent != null) + child.parent.RemoveChild(child); + + int cnt = _children.Count; + if (index == cnt) + _children.Add(child); + else + _children.Insert(index, child); + + child.parent = this; + child.level = this.level + 1; + child.SetTree(this.tree); + if (this.cell != null && this.cell.parent != null && _expanded) + tree.AfterInserted(child); + } + + return child; + } + else + { + throw new Exception("Invalid child index"); + } + } + + /// + /// + /// + /// + /// + public TreeNode RemoveChild(TreeNode child) + { + int childIndex = _children.IndexOf(child); + if (childIndex != -1) + { + RemoveChildAt(childIndex); + } + return child; + } + + /// + /// + /// + /// + /// + public TreeNode RemoveChildAt(int index) + { + if (index >= 0 && index < numChildren) + { + TreeNode child = _children[index]; + _children.RemoveAt(index); + + child.parent = null; + if (tree != null) + { + child.SetTree(null); + tree.AfterRemoved(child); + } + + return child; + } + else + { + throw new Exception("Invalid child index"); + } + } + + /// + /// + /// + /// + /// + public void RemoveChildren(int beginIndex = 0, int endIndex = -1) + { + if (endIndex < 0 || endIndex >= numChildren) + endIndex = numChildren - 1; + + for (int i = beginIndex; i <= endIndex; ++i) + RemoveChildAt(beginIndex); + } + + /// + /// + /// + /// + /// + public TreeNode GetChildAt(int index) + { + if (index >= 0 && index < numChildren) + return _children[index]; + else + throw new Exception("Invalid child index"); + } + + /// + /// + /// + /// + /// + public int GetChildIndex(TreeNode child) + { + return _children.IndexOf(child); + } + + /// + /// + /// + /// + public TreeNode GetPrevSibling() + { + if (parent == null) + return null; + + int i = parent._children.IndexOf(this); + if (i <= 0) + return null; + + return parent._children[i - 1]; + } + + /// + /// + /// + /// + public TreeNode GetNextSibling() + { + if (parent == null) + return null; + + int i = parent._children.IndexOf(this); + if (i < 0 || i >= parent._children.Count - 1) + return null; + + return parent._children[i + 1]; + } + + /// + /// + /// + /// + /// + public void SetChildIndex(TreeNode child, int index) + { + int oldIndex = _children.IndexOf(child); + if (oldIndex == -1) + throw new Exception("Not a child of this container"); + + int cnt = _children.Count; + if (index < 0) + index = 0; + else if (index > cnt) + index = cnt; + + if (oldIndex == index) + return; + + _children.RemoveAt(oldIndex); + _children.Insert(index, child); + if (this.cell != null && this.cell.parent != null && _expanded) + tree.AfterMoved(child); + } + + /// + /// + /// + /// + /// + public void SwapChildren(TreeNode child1, TreeNode child2) + { + int index1 = _children.IndexOf(child1); + int index2 = _children.IndexOf(child2); + if (index1 == -1 || index2 == -1) + throw new Exception("Not a child of this container"); + SwapChildrenAt(index1, index2); + } + + /// + /// + /// + /// + /// + public void SwapChildrenAt(int index1, int index2) + { + TreeNode child1 = _children[index1]; + TreeNode child2 = _children[index2]; + + SetChildIndex(child1, index2); + SetChildIndex(child2, index1); + } + + /// + /// + /// + public int numChildren + { + get { return (null == _children) ? 0 : _children.Count; } + } + + internal void SetTree(TreeView value) + { + tree = value; + if (tree != null && tree.treeNodeWillExpand != null && _expanded) + tree.treeNodeWillExpand(this, true); + + if (_children != null) + { + int cnt = _children.Count; + for (int i = 0; i < cnt; i++) + { + TreeNode node = _children[i]; + node.level = level + 1; + node.SetTree(value); + } + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs.meta new file mode 100644 index 0000000..9ea2e81 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeNode.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6bfc19586c7b07e4b9193f658c390727 +timeCreated: 1467555753 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs new file mode 100644 index 0000000..17bdc0d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs @@ -0,0 +1,490 @@ +using System; +using System.Collections.Generic; + +namespace FairyGUI +{ + /// + /// + /// + [Obsolete("Use GTree and GTreeNode instead")] + public class TreeView : EventDispatcher + { + /// + /// TreeView使用的List对象 + /// + public GList list { get; private set; } + + /// + /// TreeView的顶层节点,这是个虚拟节点,也就是他不会显示出来。 + /// + public TreeNode root { get; private set; } + + /// + /// TreeView每级的缩进,单位像素。 + /// + public int indent; + + public delegate GComponent TreeNodeCreateCellDelegate(TreeNode node); + public delegate void TreeNodeRenderDelegate(TreeNode node); + public delegate void TreeNodeWillExpandDelegate(TreeNode node, bool expand); + + /// + /// 当TreeNode需要创建对象的显示对象时回调 + /// + public TreeNodeCreateCellDelegate treeNodeCreateCell; + + /// + /// 当TreeNode需要更新时回调 + /// + public TreeNodeRenderDelegate treeNodeRender; + + /// + /// 当TreeNode即将展开或者收缩时回调。可以在回调中动态增加子节点。 + /// + public TreeNodeWillExpandDelegate treeNodeWillExpand; + + /// + /// 点击任意TreeNode时触发 + /// + public EventListener onClickNode { get; private set; } + + /// + /// 右键点击任意TreeNode时触发 + /// + public EventListener onRightClickNode { get; private set; } + + /// + /// + /// + /// + public TreeView(GList list) + { + this.list = list; + list.onClickItem.Add(__clickItem); + list.onRightClickItem.Add(__clickItem); + list.RemoveChildrenToPool(); + + root = new TreeNode(true); + root.SetTree(this); + root.cell = list; + root.expanded = true; + + indent = 30; + + onClickNode = new EventListener(this, "onClickNode"); + onRightClickNode = new EventListener(this, "onRightClickNode"); + } + + /// + /// + /// + /// + public TreeNode GetSelectedNode() + { + if (list.selectedIndex != -1) + return (TreeNode)list.GetChildAt(list.selectedIndex).data; + else + return null; + } + + /// + /// + /// + /// + public List GetSelection() + { + List sels = list.GetSelection(); + int cnt = sels.Count; + List ret = new List(); + for (int i = 0; i < cnt; i++) + { + TreeNode node = (TreeNode)list.GetChildAt(sels[i]).data; + ret.Add(node); + } + return ret; + } + + /// + /// + /// + /// + /// + public void AddSelection(TreeNode node, bool scrollItToView = false) + { + TreeNode parentNode = node.parent; + while (parentNode != null && parentNode != root) + { + parentNode.expanded = true; + parentNode = parentNode.parent; + } + list.AddSelection(list.GetChildIndex(node.cell), scrollItToView); + } + + /// + /// + /// + /// + public void RemoveSelection(TreeNode node) + { + list.RemoveSelection(list.GetChildIndex(node.cell)); + } + + /// + /// + /// + public void ClearSelection() + { + list.ClearSelection(); + } + + /// + /// + /// + /// + /// + public int GetNodeIndex(TreeNode node) + { + return list.GetChildIndex(node.cell); + } + + /// + /// + /// + /// + public void UpdateNode(TreeNode node) + { + if (node.cell == null) + return; + + if (treeNodeRender != null) + treeNodeRender(node); + } + + /// + /// + /// + /// + public void UpdateNodes(List nodes) + { + int cnt = nodes.Count; + for (int i = 0; i < cnt; i++) + { + TreeNode node = nodes[i]; + if (node.cell == null) + return; + + if (treeNodeRender != null) + treeNodeRender(node); + } + } + + /// + /// + /// + /// + public void ExpandAll(TreeNode folderNode) + { + folderNode.expanded = true; + int cnt = folderNode.numChildren; + for (int i = 0; i < cnt; i++) + { + TreeNode node = folderNode.GetChildAt(i); + if (node.isFolder) + ExpandAll(node); + } + } + + /// + /// + /// + /// + public void CollapseAll(TreeNode folderNode) + { + if (folderNode != root) + folderNode.expanded = false; + int cnt = folderNode.numChildren; + for (int i = 0; i < cnt; i++) + { + TreeNode node = folderNode.GetChildAt(i); + if (node.isFolder) + CollapseAll(node); + } + } + + /// + /// + /// + /// + void CreateCell(TreeNode node) + { + if (treeNodeCreateCell != null) + node.cell = treeNodeCreateCell(node); + else + node.cell = list.itemPool.GetObject(list.defaultItem) as GComponent; + if (node.cell == null) + throw new Exception("Unable to create tree cell"); + node.cell.data = node; + + GObject indentObj = node.cell.GetChild("indent"); + if (indentObj != null) + indentObj.width = (node.level - 1) * indent; + + GButton expandButton = (GButton)node.cell.GetChild("expandButton"); + if (expandButton != null) + { + if (node.isFolder) + { + expandButton.visible = true; + expandButton.onClick.Add(__clickExpandButton); + expandButton.data = node; + expandButton.selected = node.expanded; + } + else + expandButton.visible = false; + } + + if (treeNodeRender != null) + treeNodeRender(node); + } + + /// + /// + /// + /// + internal void AfterInserted(TreeNode node) + { + CreateCell(node); + + int index = GetInsertIndexForNode(node); + list.AddChildAt(node.cell, index); + if (treeNodeRender != null) + treeNodeRender(node); + + if (node.isFolder && node.expanded) + CheckChildren(node, index); + } + + /// + /// + /// + /// + /// + int GetInsertIndexForNode(TreeNode node) + { + TreeNode prevNode = node.GetPrevSibling(); + if (prevNode == null) + prevNode = node.parent; + int insertIndex = list.GetChildIndex(prevNode.cell) + 1; + int myLevel = node.level; + int cnt = list.numChildren; + for (int i = insertIndex; i < cnt; i++) + { + TreeNode testNode = (TreeNode)list.GetChildAt(i).data; + if (testNode.level <= myLevel) + break; + + insertIndex++; + } + + return insertIndex; + } + + /// + /// + /// + /// + internal void AfterRemoved(TreeNode node) + { + RemoveNode(node); + } + + /// + /// + /// + /// + internal void AfterExpanded(TreeNode node) + { + if (node != root && treeNodeWillExpand != null) + treeNodeWillExpand(node, true); + + if (node.cell == null) + return; + + if (node != root) + { + if (treeNodeRender != null) + treeNodeRender(node); + + GButton expandButton = (GButton)node.cell.GetChild("expandButton"); + if (expandButton != null) + expandButton.selected = true; + } + + if (node.cell.parent != null) + CheckChildren(node, list.GetChildIndex(node.cell)); + } + + /// + /// + /// + /// + internal void AfterCollapsed(TreeNode node) + { + if (node != root && treeNodeWillExpand != null) + treeNodeWillExpand(node, false); + + if (node.cell == null) + return; + + if (node != root) + { + if (treeNodeRender != null) + treeNodeRender(node); + + GButton expandButton = (GButton)node.cell.GetChild("expandButton"); + if (expandButton != null) + expandButton.selected = false; + } + + if (node.cell.parent != null) + HideFolderNode(node); + } + + /// + /// + /// + /// + internal void AfterMoved(TreeNode node) + { + if (!node.isFolder) + list.RemoveChild(node.cell); + else + HideFolderNode(node); + + int index = GetInsertIndexForNode(node); + list.AddChildAt(node.cell, index); + + if (node.isFolder && node.expanded) + CheckChildren(node, index); + } + + /// + /// + /// + /// + /// + /// + int CheckChildren(TreeNode folderNode, int index) + { + int cnt = folderNode.numChildren; + for (int i = 0; i < cnt; i++) + { + index++; + TreeNode node = folderNode.GetChildAt(i); + if (node.cell == null) + CreateCell(node); + + if (node.cell.parent == null) + list.AddChildAt(node.cell, index); + + if (node.isFolder && node.expanded) + index = CheckChildren(node, index); + } + + return index; + } + + /// + /// + /// + /// + void HideFolderNode(TreeNode folderNode) + { + int cnt = folderNode.numChildren; + for (int i = 0; i < cnt; i++) + { + TreeNode node = folderNode.GetChildAt(i); + if (node.cell != null) + { + if (node.cell.parent != null) + list.RemoveChild(node.cell); + list.itemPool.ReturnObject(node.cell); + node.cell.data = null; + node.cell = null; + } + if (node.isFolder && node.expanded) + HideFolderNode(node); + } + } + + /// + /// + /// + /// + void RemoveNode(TreeNode node) + { + if (node.cell != null) + { + if (node.cell.parent != null) + list.RemoveChild(node.cell); + list.itemPool.ReturnObject(node.cell); + node.cell.data = null; + node.cell = null; + } + + if (node.isFolder) + { + int cnt = node.numChildren; + for (int i = 0; i < cnt; i++) + { + TreeNode node2 = node.GetChildAt(i); + RemoveNode(node2); + } + } + } + + void __clickExpandButton(EventContext context) + { + context.StopPropagation(); + + GButton expandButton = (GButton)context.sender; + TreeNode node = (TreeNode)expandButton.parent.data; + if (list.scrollPane != null) + { + float posY = list.scrollPane.posY; + if (expandButton.selected) + node.expanded = true; + else + node.expanded = false; + list.scrollPane.posY = posY; + list.scrollPane.ScrollToView(node.cell); + } + else + { + if (expandButton.selected) + node.expanded = true; + else + node.expanded = false; + } + } + + void __clickItem(EventContext context) + { + float posY = 0; + if (list.scrollPane != null) + posY = list.scrollPane.posY; + + TreeNode node = (TreeNode)((GObject)context.data).data; + if (context.type == list.onRightClickItem.type) + onRightClickNode.Call(node); + else + onClickNode.Call(node); + + if (list.scrollPane != null) + { + list.scrollPane.posY = posY; + list.scrollPane.ScrollToView(node.cell); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs.meta new file mode 100644 index 0000000..df9c2cb --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Tree/TreeView.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5a8a82de90eec564d9b40a4192d27f3d +timeCreated: 1467555753 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs new file mode 100644 index 0000000..24081f9 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs @@ -0,0 +1,470 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// Global configs. These options should be set before any UI construction. + /// + [AddComponentMenu("FairyGUI/UI Config")] + public class UIConfig : MonoBehaviour + { + /// + /// Dynamic Font Support. + /// 4.x: Put the xxx.ttf into /Resources or /Resources/Fonts, and set defaultFont="xxx". + /// 5.x: set defaultFont to system font name(or names joint with comma). e.g. defaultFont="Microsoft YaHei, SimHei" + /// + public static string defaultFont = ""; + + [Obsolete("No use anymore")] + public static bool renderingTextBrighterOnDesktop = true; + + /// + /// Resource using in Window.ShowModalWait for locking the window. + /// + public static string windowModalWaiting; + + /// + /// Resource using in GRoot.ShowModalWait for locking the screen. + /// + public static string globalModalWaiting; + + /// + /// When a modal window is in front, the background becomes dark. + /// + public static Color modalLayerColor = new Color(0f, 0f, 0f, 0.4f); + + /// + /// Default button click sound. + /// + public static NAudioClip buttonSound; + + /// + /// Default button click sound volume. + /// + public static float buttonSoundVolumeScale = 1f; + + /// + /// Resource url of horizontal scrollbar + /// + public static string horizontalScrollBar; + + /// + /// Resource url of vertical scrollbar + /// + public static string verticalScrollBar; + + /// + /// Scrolling step in pixels + /// 当调用ScrollPane.scrollUp/Down/Left/Right时,或者点击滚动条的上下箭头时,滑动的距离。 + /// 鼠标滚轮触发一次滚动的距离设定为defaultScrollStep*2 + /// + public static float defaultScrollStep = 25; + + /// + /// Deceleration ratio of scrollpane when its in touch dragging. + /// 当手指拖动并释放滚动区域后,内容会滑动一定距离后停下,这个速率就是减速的速率。 + /// 越接近1,减速越慢,意味着滑动的时间和距离更长。 + /// 这个是全局设置,也可以通过ScrollPane.decelerationRate进行个性设置。 + /// + public static float defaultScrollDecelerationRate = 0.967f; + + /// + /// Scrollbar display mode. Recommended 'Auto' for mobile and 'Visible' for web. + /// + public static ScrollBarDisplayType defaultScrollBarDisplay = ScrollBarDisplayType.Default; + + /// + /// Allow dragging anywhere in container to scroll. + /// + public static bool defaultScrollTouchEffect = true; + + /// + /// The "rebound" effect in the scolling container. + /// + public static bool defaultScrollBounceEffect = true; + + /// + /// When the scrolling container is set to "snap to the item", the rolling distance threshold of which item is close to is determined. + /// + public static float defaultScrollSnappingThreshold = 0.5f; + + /// + /// When the scrolling container is set to "page mode", it determines the scrolling distance threshold to which page to turn. + /// + public static float defaultScrollPagingThreshold = 0.3f; + + /// + /// Resources url of PopupMenu. + /// + public static string popupMenu; + + /// + /// Resource url of menu seperator. + /// + public static string popupMenu_seperator; + + /// + /// In case of failure of loading content for GLoader, use this sign to indicate an error. + /// + public static string loaderErrorSign; + + /// + /// Resource url of tooltips. + /// + public static string tooltipsWin; + + /// + /// The number of visible items in ComboBox. + /// + public static int defaultComboBoxVisibleItemCount = 10; + + /// + /// Pixel offsets of finger to trigger scrolling + /// + public static int touchScrollSensitivity = 20; + + /// + /// Pixel offsets of finger to trigger dragging + /// + public static int touchDragSensitivity = 10; + + /// + /// Pixel offsets of mouse pointer to trigger dragging. + /// + public static int clickDragSensitivity = 2; + + /// + /// Allow softness on top or left side for scrollpane. + /// + public static bool allowSoftnessOnTopOrLeftSide = true; + + /// + /// When click the window, brings to front automatically. + /// + public static bool bringWindowToFrontOnClick = true; + + /// + /// + /// + public static float inputCaretSize = 1; + + /// + /// + /// + public static Color inputHighlightColor = new Color32(255, 223, 141, 128); + + /// + /// + /// + public static float frameTimeForAsyncUIConstruction = 0.002f; + + /// + /// if RenderTexture using in painting mode has depth support. + /// + public static bool depthSupportForPaintingMode = true; + + /// + /// Indicates whether to draw extra 4 or 8 times to achieve stroke effect for textfield. + /// If it is true, that is the 8 times, otherwise it is the 4 times. + /// + public static bool enhancedTextOutlineEffect = false; + + [Obsolete("No use anymore.")] + public static VertAlignType richTextRowVerticalAlign = VertAlignType.Bottom; + + /// + /// Suggest to enable it on low dpi (e.g. 96dpi) screens. + /// + public static bool makePixelPerfect = false; + + public enum ConfigKey + { + DefaultFont, + ButtonSound, + ButtonSoundVolumeScale, + HorizontalScrollBar, + VerticalScrollBar, + DefaultScrollStep, + DefaultScrollBarDisplay, + DefaultScrollTouchEffect, + DefaultScrollBounceEffect, + TouchScrollSensitivity, + WindowModalWaiting, + GlobalModalWaiting, + PopupMenu, + PopupMenu_seperator, + LoaderErrorSign, + TooltipsWin, + DefaultComboBoxVisibleItemCount, + TouchDragSensitivity, + ClickDragSensitivity, + ModalLayerColor, + RenderingTextBrighterOnDesktop, + AllowSoftnessOnTopOrLeftSide, + InputCaretSize, + InputHighlightColor, + EnhancedTextOutlineEffect, + DepthSupportForPaintingMode, + RichTextRowVerticalAlign, + Branch, + + PleaseSelect = 100 + } + + [Serializable] + public class ConfigValue + { + public bool valid; + public string s; + public int i; + public float f; + public bool b; + public Color c; + + public void Reset() + { + valid = false; + s = null; + i = 0; + f = 0; + b = false; + c = Color.black; + } + } + + public List Items = new List(); + public List PreloadPackages = new List(); + + void Awake() + { + if (Application.isPlaying) + { + foreach (string packagePath in PreloadPackages) + { + UIPackage.AddPackage(packagePath); + } + + Load(); + } + } + + public void Load() + { + int cnt = Items.Count; + for (int i = 0; i < cnt; i++) + { + ConfigValue value = Items[i]; + if (!value.valid) + continue; + + switch ((UIConfig.ConfigKey)i) + { + case ConfigKey.ButtonSound: + if (Application.isPlaying) + UIConfig.buttonSound = UIPackage.GetItemAssetByURL(value.s) as NAudioClip; + break; + + case ConfigKey.ButtonSoundVolumeScale: + UIConfig.buttonSoundVolumeScale = value.f; + break; + + case ConfigKey.ClickDragSensitivity: + UIConfig.clickDragSensitivity = value.i; + break; + + case ConfigKey.DefaultComboBoxVisibleItemCount: + UIConfig.defaultComboBoxVisibleItemCount = value.i; + break; + + case ConfigKey.DefaultFont: + UIConfig.defaultFont = value.s; + break; + + case ConfigKey.DefaultScrollBarDisplay: + UIConfig.defaultScrollBarDisplay = (ScrollBarDisplayType)value.i; + break; + + case ConfigKey.DefaultScrollBounceEffect: + UIConfig.defaultScrollBounceEffect = value.b; + break; + + case ConfigKey.DefaultScrollStep: + UIConfig.defaultScrollStep = value.i; + break; + + case ConfigKey.DefaultScrollTouchEffect: + UIConfig.defaultScrollTouchEffect = value.b; + break; + + case ConfigKey.GlobalModalWaiting: + UIConfig.globalModalWaiting = value.s; + break; + + case ConfigKey.HorizontalScrollBar: + UIConfig.horizontalScrollBar = value.s; + break; + + case ConfigKey.LoaderErrorSign: + UIConfig.loaderErrorSign = value.s; + break; + + case ConfigKey.ModalLayerColor: + UIConfig.modalLayerColor = value.c; + break; + + case ConfigKey.PopupMenu: + UIConfig.popupMenu = value.s; + break; + + case ConfigKey.PopupMenu_seperator: + UIConfig.popupMenu_seperator = value.s; + break; + + case ConfigKey.TooltipsWin: + UIConfig.tooltipsWin = value.s; + break; + + case ConfigKey.TouchDragSensitivity: + UIConfig.touchDragSensitivity = value.i; + break; + + case ConfigKey.TouchScrollSensitivity: + UIConfig.touchScrollSensitivity = value.i; + break; + + case ConfigKey.VerticalScrollBar: + UIConfig.verticalScrollBar = value.s; + break; + + case ConfigKey.WindowModalWaiting: + UIConfig.windowModalWaiting = value.s; + break; + + case ConfigKey.AllowSoftnessOnTopOrLeftSide: + UIConfig.allowSoftnessOnTopOrLeftSide = value.b; + break; + + case ConfigKey.InputCaretSize: + UIConfig.inputCaretSize = value.i; + break; + + case ConfigKey.InputHighlightColor: + UIConfig.inputHighlightColor = value.c; + break; + + case ConfigKey.DepthSupportForPaintingMode: + UIConfig.depthSupportForPaintingMode = value.b; + break; + + case ConfigKey.EnhancedTextOutlineEffect: + UIConfig.enhancedTextOutlineEffect = value.b; + break; + + case ConfigKey.Branch: + UIPackage.branch = value.s; + break; + } + } + } + + public static void SetDefaultValue(ConfigKey key, ConfigValue value) + { + switch (key) + { + case ConfigKey.ButtonSoundVolumeScale: + value.f = 1; + break; + + case ConfigKey.ClickDragSensitivity: + value.i = 2; + break; + + case ConfigKey.DefaultComboBoxVisibleItemCount: + value.i = 10; + break; + + case ConfigKey.DefaultScrollBarDisplay: + value.i = (int)ScrollBarDisplayType.Default; + break; + + case ConfigKey.DefaultScrollBounceEffect: + case ConfigKey.DefaultScrollTouchEffect: + value.b = true; + break; + + case ConfigKey.DefaultScrollStep: + value.i = 25; + break; + + case ConfigKey.ModalLayerColor: + value.c = new Color(0f, 0f, 0f, 0.4f); + break; + + case ConfigKey.RenderingTextBrighterOnDesktop: + value.b = true; + break; + + case ConfigKey.TouchDragSensitivity: + value.i = 10; + break; + + case ConfigKey.TouchScrollSensitivity: + value.i = 20; + break; + + case ConfigKey.InputCaretSize: + value.i = 1; + break; + + case ConfigKey.InputHighlightColor: + value.c = new Color32(255, 223, 141, 128); + break; + + case ConfigKey.DepthSupportForPaintingMode: + value.b = false; + break; + + case ConfigKey.Branch: + value.s = ""; + break; + } + } + + public static void ClearResourceRefs() + { + UIConfig.defaultFont = ""; + UIConfig.buttonSound = null; + UIConfig.globalModalWaiting = null; + UIConfig.horizontalScrollBar = null; + UIConfig.loaderErrorSign = null; + UIConfig.popupMenu = null; + UIConfig.popupMenu_seperator = null; + UIConfig.tooltipsWin = null; + UIConfig.verticalScrollBar = null; + UIConfig.windowModalWaiting = null; + UIConfig.soundLoader = null; + } + + public void ApplyModifiedProperties() + { + EMRenderSupport.Reload(); + } + + public delegate NAudioClip SoundLoader(string url); + + /// + /// + /// + public static SoundLoader soundLoader = null; + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + ClearResourceRefs(); + } +#endif + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs.meta new file mode 100644 index 0000000..bffb217 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIConfig.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ace51c3cbb5309547a7029cadaaa20ca +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs new file mode 100644 index 0000000..1daebb1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs @@ -0,0 +1,217 @@ +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + [ExecuteInEditMode] + [AddComponentMenu("FairyGUI/UI Content Scaler")] + public class UIContentScaler : MonoBehaviour + { + /// + /// + /// + public enum ScaleMode + { + ConstantPixelSize, + ScaleWithScreenSize, + ConstantPhysicalSize + } + + /// + /// + /// + public enum ScreenMatchMode + { + MatchWidthOrHeight, + MatchWidth, + MatchHeight + } + + /// + /// + /// + public ScaleMode scaleMode; + + /// + /// + /// + public ScreenMatchMode screenMatchMode; + + /// + /// + /// + public int designResolutionX; + + /// + /// + /// + public int designResolutionY; + + /// + /// + /// + public int fallbackScreenDPI = 96; + + /// + /// + /// + public int defaultSpriteDPI = 96; + + /// + /// + /// + public float constantScaleFactor = 1; + + /// + /// 当false时,计算比例时会考虑designResolutionX/Y的设置是针对横屏还是竖屏。否则不考虑。 + /// + public bool ignoreOrientation = false; + + [System.NonSerialized] + public static float scaleFactor = 1; + + [System.NonSerialized] + public static int scaleLevel = 0; + + [System.NonSerialized] + bool _changed; + + void OnEnable() + { + if (Application.isPlaying) + { + //播放模式下都是通过Stage自带的UIContentScaler实现调整的,所以这里只是把参数传过去 + UIContentScaler scaler = Stage.inst.gameObject.GetComponent(); + if (scaler != this) + { + scaler.scaleMode = scaleMode; + if (scaleMode == ScaleMode.ScaleWithScreenSize) + { + scaler.designResolutionX = designResolutionX; + scaler.designResolutionY = designResolutionY; + scaler.screenMatchMode = screenMatchMode; + scaler.ignoreOrientation = ignoreOrientation; + } + else if (scaleMode == ScaleMode.ConstantPhysicalSize) + { + scaler.fallbackScreenDPI = fallbackScreenDPI; + scaler.defaultSpriteDPI = defaultSpriteDPI; + } + else + { + scaler.constantScaleFactor = constantScaleFactor; + } + scaler.ApplyChange(); + GRoot.inst.ApplyContentScaleFactor(); + } + } + else //Screen width/height is not reliable in OnEnable in editmode + _changed = true; + } + + void Update() + { + if (_changed) + { + _changed = false; + ApplyChange(); + } + } + + void OnDestroy() + { + if (!Application.isPlaying) + { + scaleFactor = 1; + scaleLevel = 0; + } + } + + //For UIContentScalerEditor Only, as the Screen.width/height is not correct in OnInspectorGUI + /// + /// + /// + public void ApplyModifiedProperties() + { + _changed = true; + } + + /// + /// + /// + public void ApplyChange() + { + float screenWidth; + float screenHeight; + + if (Application.isPlaying) //In case of multi display, we keep using the display which Stage object resides. + { + screenWidth = Stage.inst.width; + screenHeight = Stage.inst.height; + } + else + { + screenWidth = Screen.width; + screenHeight = Screen.height; + } + if (scaleMode == ScaleMode.ScaleWithScreenSize) + { + if (designResolutionX == 0 || designResolutionY == 0) + return; + + int dx = designResolutionX; + int dy = designResolutionY; + if (!ignoreOrientation && (screenWidth > screenHeight && dx < dy || screenWidth < screenHeight && dx > dy)) + { + //scale should not change when orientation change + int tmp = dx; + dx = dy; + dy = tmp; + } + + if (screenMatchMode == ScreenMatchMode.MatchWidthOrHeight) + { + float s1 = (float)screenWidth / dx; + float s2 = (float)screenHeight / dy; + scaleFactor = Mathf.Min(s1, s2); + } + else if (screenMatchMode == ScreenMatchMode.MatchWidth) + scaleFactor = (float)screenWidth / dx; + else + scaleFactor = (float)screenHeight / dy; + } + else if (scaleMode == ScaleMode.ConstantPhysicalSize) + { + float dpi = Screen.dpi; + if (dpi == 0) + dpi = fallbackScreenDPI; + if (dpi == 0) + dpi = 96; + scaleFactor = dpi / (defaultSpriteDPI == 0 ? 96 : defaultSpriteDPI); + } + else + scaleFactor = constantScaleFactor; + + if (scaleFactor > 10) + scaleFactor = 10; + + UpdateScaleLevel(); + + StageCamera.screenSizeVer++; + } + + void UpdateScaleLevel() + { + if (scaleFactor > 3) + scaleLevel = 3; //x4 + else if (scaleFactor > 2) + scaleLevel = 2; //x3 + else if (scaleFactor > 1) + scaleLevel = 1; //x2 + else + scaleLevel = 0; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs.meta new file mode 100644 index 0000000..4607798 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIContentScaler.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a723f7fd716aac049aa24e9186f18685 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs new file mode 100644 index 0000000..a849323 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +#if FAIRYGUI_TOLUA +using LuaInterface; +#endif + +namespace FairyGUI +{ + /// + /// + /// + public class UIObjectFactory + { + public delegate GComponent GComponentCreator(); + public delegate GLoader GLoaderCreator(); + + static Dictionary packageItemExtensions = new Dictionary(); + static GLoaderCreator loaderCreator; + + /// + /// + /// + /// + /// + public static void SetPackageItemExtension(string url, System.Type type) + { + SetPackageItemExtension(url, () => { return (GComponent)Activator.CreateInstance(type); }); + } + + /// + /// + /// + /// + /// + public static void SetPackageItemExtension(string url, GComponentCreator creator) + { + if (url == null) + throw new Exception("Invaild url: " + url); + + PackageItem pi = UIPackage.GetItemByURL(url); + if (pi != null) + pi.extensionCreator = creator; + + packageItemExtensions[url] = creator; + } + +#if FAIRYGUI_TOLUA + public static void SetExtension(string url, System.Type baseType, LuaFunction extendFunction) + { + SetPackageItemExtension(url, () => + { + GComponent gcom = (GComponent)Activator.CreateInstance(baseType); + + extendFunction.BeginPCall(); + extendFunction.Push(gcom); + extendFunction.PCall(); + gcom.SetLuaPeer(extendFunction.CheckLuaTable()); + extendFunction.EndPCall(); + + return gcom; + }); + } +#endif + + /// + /// + /// + /// + public static void SetLoaderExtension(System.Type type) + { + loaderCreator = () => { return (GLoader)Activator.CreateInstance(type); }; + } + + /// + /// + /// + /// + public static void SetLoaderExtension(GLoaderCreator creator) + { + loaderCreator = creator; + } + + internal static void ResolvePackageItemExtension(PackageItem pi) + { + if (!packageItemExtensions.TryGetValue(UIPackage.URL_PREFIX + pi.owner.id + pi.id, out pi.extensionCreator) + && !packageItemExtensions.TryGetValue(UIPackage.URL_PREFIX + pi.owner.name + "/" + pi.name, out pi.extensionCreator)) + pi.extensionCreator = null; + } + + public static void Clear() + { + packageItemExtensions.Clear(); + loaderCreator = null; + } + + /// + /// + /// + /// + /// + /// + public static GObject NewObject(PackageItem pi, System.Type userClass = null) + { + GObject obj; + if (pi.type == PackageItemType.Component) + { + if (userClass != null) + { + Stats.LatestObjectCreation++; + obj = (GComponent)Activator.CreateInstance(userClass); + } + else if (pi.extensionCreator != null) + { + Stats.LatestObjectCreation++; + obj = pi.extensionCreator(); + } + else + obj = NewObject(pi.objectType); + } + else + obj = NewObject(pi.objectType); + + if (obj != null) + obj.packageItem = pi; + + return obj; + } + + /// + /// + /// + /// + /// + public static GObject NewObject(ObjectType type) + { + Stats.LatestObjectCreation++; + + switch (type) + { + case ObjectType.Image: + return new GImage(); + + case ObjectType.MovieClip: + return new GMovieClip(); + + case ObjectType.Component: + return new GComponent(); + + case ObjectType.Text: + return new GTextField(); + + case ObjectType.RichText: + return new GRichTextField(); + + case ObjectType.InputText: + return new GTextInput(); + + case ObjectType.Group: + return new GGroup(); + + case ObjectType.List: + return new GList(); + + case ObjectType.Graph: + return new GGraph(); + + case ObjectType.Loader: + if (loaderCreator != null) + return loaderCreator(); + else + return new GLoader(); + + case ObjectType.Button: + return new GButton(); + + case ObjectType.Label: + return new GLabel(); + + case ObjectType.ProgressBar: + return new GProgressBar(); + + case ObjectType.Slider: + return new GSlider(); + + case ObjectType.ScrollBar: + return new GScrollBar(); + + case ObjectType.ComboBox: + return new GComboBox(); + + case ObjectType.Tree: + return new GTree(); + + case ObjectType.Loader3D: + return new GLoader3D(); + + default: + return null; + } + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + Clear(); + } +#endif + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs.meta new file mode 100644 index 0000000..06bceef --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIObjectFactory.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 461feec05183bbf4f908aa1455325715 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs new file mode 100644 index 0000000..e45a341 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs @@ -0,0 +1,1692 @@ +using System; +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using FairyGUI.Utils; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FairyGUI +{ + /// + /// A UI Package contains a description file and some texture, sound assets. + /// + public class UIPackage + { + /// + /// Unload UIAssetBundle by FairyGUI system. + /// if use AssetBundlesManager set value to false + /// then unload UIAssetBundle by AssetBundlesManager + /// + public static bool unloadBundleByFGUI = true; + + /// + /// The event is triggered when all reference to this package item dropped. + /// + public static event Action onReleaseResource; + + /// + /// Package id. It is generated by the Editor. + /// + public string id { get; private set; } + + /// + /// Package name. + /// + public string name { get; private set; } + + /// + /// Use this callback to provide resources to the package. + /// + /// Resource name without extension. + /// Resource extension. e.g. '.png' '.wav' + /// Resource type. e.g. 'Texture' 'AudioClip' + /// How to destroy this resource. + /// + public delegate object LoadResource(string name, string extension, System.Type type, out DestroyMethod destroyMethod); + + /// + /// A async load resource callback. After loaded, you should call item.owner.SetItemAsset. + /// + /// Resource name without extension. + /// Resource extension. e.g. '.png' '.wav' + /// Resource type. e.g. 'Texture' 'AudioClip' + /// Resource item object. + /// + public delegate void LoadResourceAsync(string name, string extension, System.Type type, PackageItem item); + + /// + /// + /// + /// + public delegate void CreateObjectCallback(GObject result); + + List _items; + Dictionary _itemsById; + Dictionary _itemsByName; + Dictionary[] _dependencies; + string _assetPath; + string[] _branches; + internal int _branchIndex; + AssetBundle _resBundle; + string _customId; + bool _fromBundle; + LoadResource _loadFunc; + LoadResourceAsync _loadAsyncFunc; + + class AtlasSprite + { + public PackageItem atlas; + public Rect rect = new Rect(); + public Vector2 offset = new Vector2(); + public Vector2 originalSize = new Vector2(); + public bool rotated; + } + Dictionary _sprites; + + static Dictionary _packageInstById = new Dictionary(); + static Dictionary _packageInstByName = new Dictionary(); + static List _packageList = new List(); + static string _branch; + static Dictionary _vars = new Dictionary(); + + internal static int _constructing; + + public const string URL_PREFIX = "ui://"; + +#if UNITY_EDITOR + static LoadResource _loadFromAssetsPath = (string name, string extension, System.Type type, out DestroyMethod destroyMethod) => + { + destroyMethod = DestroyMethod.Unload; + return AssetDatabase.LoadAssetAtPath(name + extension, type); + }; +#endif + + static LoadResource _loadFromResourcesPath = (string name, string extension, System.Type type, out DestroyMethod destroyMethod) => + { + destroyMethod = DestroyMethod.Unload; + return Resources.Load(name, type); + }; + + public UIPackage() + { + _items = new List(); + _itemsById = new Dictionary(); + _itemsByName = new Dictionary(); + _sprites = new Dictionary(); + + _branchIndex = -1; + } + + /// + /// + /// + public static string branch + { + get { return _branch; } + set + { + _branch = value; + bool empty = string.IsNullOrEmpty(_branch); + var iter = _packageInstById.GetEnumerator(); + while (iter.MoveNext()) + { + UIPackage pkg = iter.Current.Value; + if (empty) + pkg._branchIndex = -1; + else if (pkg._branches != null) + pkg._branchIndex = Array.IndexOf(pkg._branches, value); + } + iter.Dispose(); + } + } + + /// + /// + /// + public static string GetVar(string key) + { + string value; + if (_vars.TryGetValue(key, out value)) + return value; + else + return null; + } + + /// + /// + /// + public static void SetVar(string key, string value) + { + if (value == null) + _vars.Remove(key); + else + _vars[key] = value; + } + + /// + /// Return a UIPackage with a certain id. + /// + /// ID of the package. + /// UIPackage + public static UIPackage GetById(string id) + { + UIPackage pkg; + if (_packageInstById.TryGetValue(id, out pkg)) + return pkg; + else + return null; + } + + /// + /// Return a UIPackage with a certain name. + /// + /// Name of the package. + /// UIPackage + public static UIPackage GetByName(string name) + { + UIPackage pkg; + if (_packageInstByName.TryGetValue(name, out pkg)) + return pkg; + else + return null; + } + + /// + /// Add a UI package from assetbundle. + /// + /// A assetbundle. + /// UIPackage + public static UIPackage AddPackage(AssetBundle bundle) + { + return AddPackage(bundle, bundle, null); + } + + /// + /// Add a UI package from two assetbundles. desc and res can be same. + /// + /// A assetbunble contains description file. + /// A assetbundle contains resources. + /// UIPackage + public static UIPackage AddPackage(AssetBundle desc, AssetBundle res) + { + return AddPackage(desc, res, null); + } + + /// + /// Add a UI package from two assetbundles with a optional main asset name. + /// + /// A assetbunble contains description file. + /// A assetbundle contains resources. + /// Main asset name. e.g. Basics_fui + /// UIPackage + public static UIPackage AddPackage(AssetBundle desc, AssetBundle res, string mainAssetName) + { + byte[] source = null; + if (!string.IsNullOrEmpty(mainAssetName)) + { + TextAsset ta = desc.LoadAsset(mainAssetName); + if (ta != null) + source = ta.bytes; + } + else + { + string[] names = desc.GetAllAssetNames(); + string searchPattern = "_fui"; + foreach (string n in names) + { + if (n.IndexOf(searchPattern) != -1) + { + TextAsset ta = desc.LoadAsset(n); + if (ta != null) + { + source = ta.bytes; + mainAssetName = Path.GetFileNameWithoutExtension(n); + break; + } + } + } + } + + if (source == null) + throw new Exception("FairyGUI: no package found in this bundle."); + + if (unloadBundleByFGUI && desc != res) + desc.Unload(true); + + ByteBuffer buffer = new ByteBuffer(source); + + UIPackage pkg = new UIPackage(); + pkg._resBundle = res; + pkg._fromBundle = true; + int pos = mainAssetName.IndexOf("_fui"); + if (pos != -1) + mainAssetName = mainAssetName.Substring(0, pos); + if (!pkg.LoadPackage(buffer, mainAssetName)) + return null; + + _packageInstById[pkg.id] = pkg; + _packageInstByName[pkg.name] = pkg; + _packageList.Add(pkg); + + return pkg; + } + + /// + /// Add a UI package from a path relative to Unity Resources path. + /// + /// Path relative to Unity Resources path. + /// UIPackage + public static UIPackage AddPackage(string descFilePath) + { + if (descFilePath.StartsWith("Assets/")) + { +#if UNITY_EDITOR + return AddPackage(descFilePath, _loadFromAssetsPath); +#else + + Debug.LogWarning("FairyGUI: failed to load package in '" + descFilePath + "'"); + return null; +#endif + } + else + return AddPackage(descFilePath, _loadFromResourcesPath); + } + + /// + /// 使用自定义的加载方式载入一个包。 + /// + /// 包资源路径。 + /// 载入函数 + /// + public static UIPackage AddPackage(string assetPath, LoadResource loadFunc) + { + if (_packageInstById.ContainsKey(assetPath)) + return _packageInstById[assetPath]; + + DestroyMethod dm; + TextAsset asset = (TextAsset)loadFunc(assetPath + "_fui", ".bytes", typeof(TextAsset), out dm); + if (asset == null) + { + if (Application.isPlaying) + throw new Exception("FairyGUI: Cannot load ui package in '" + assetPath + "'"); + else + Debug.LogWarning("FairyGUI: Cannot load ui package in '" + assetPath + "'"); + } + + ByteBuffer buffer = new ByteBuffer(asset.bytes); + + UIPackage pkg = new UIPackage(); + pkg._loadFunc = loadFunc; + pkg._assetPath = assetPath; + if (!pkg.LoadPackage(buffer, assetPath)) + return null; + + _packageInstById[pkg.id] = pkg; + _packageInstByName[pkg.name] = pkg; + _packageInstById[assetPath] = pkg; + _packageList.Add(pkg); + return pkg; + } + + /// + /// Load Package by custom load method. + /// + /// Description file data + /// Prefix of the resource file name. The file name would be in format of 'assetNamePrefix_resFileName'. It can be empty. + /// Load method + /// + public static UIPackage AddPackage(byte[] descData, string assetNamePrefix, LoadResource loadFunc) + { + ByteBuffer buffer = new ByteBuffer(descData); + + UIPackage pkg = new UIPackage(); + pkg._loadFunc = loadFunc; + if (!pkg.LoadPackage(buffer, assetNamePrefix)) + return null; + + _packageInstById[pkg.id] = pkg; + _packageInstByName[pkg.name] = pkg; + _packageList.Add(pkg); + + return pkg; + } + + /// + /// Load Package async by custom load method. + /// + /// Description file data + /// refix of the resource file name. The file name would be in format of 'assetNamePrefix_resFileName'. It can be empty. + /// Load method + /// + public static UIPackage AddPackage(byte[] descData, string assetNamePrefix, LoadResourceAsync loadFunc) + { + ByteBuffer buffer = new ByteBuffer(descData); + + UIPackage pkg = new UIPackage(); + pkg._loadAsyncFunc = loadFunc; + if (!pkg.LoadPackage(buffer, assetNamePrefix)) + return null; + + _packageInstById[pkg.id] = pkg; + _packageInstByName[pkg.name] = pkg; + _packageList.Add(pkg); + + return pkg; + } + + /// + /// Remove a package. All resources in this package will be disposed. + /// + /// + public static void RemovePackage(string packageIdOrName) + { + UIPackage pkg = null; + if (!_packageInstById.TryGetValue(packageIdOrName, out pkg)) + { + if (!_packageInstByName.TryGetValue(packageIdOrName, out pkg)) + throw new Exception("FairyGUI: '" + packageIdOrName + "' is not a valid package id or name."); + } + pkg.Dispose(); + _packageInstById.Remove(pkg.id); + if (pkg._customId != null) + _packageInstById.Remove(pkg._customId); + if (pkg._assetPath != null) + _packageInstById.Remove(pkg._assetPath); + _packageInstByName.Remove(pkg.name); + _packageList.Remove(pkg); + } + + /// + /// + /// + public static void RemoveAllPackages() + { + if (_packageInstById.Count > 0) + { + UIPackage[] pkgs = _packageList.ToArray(); + + foreach (UIPackage pkg in pkgs) + { + pkg.Dispose(); + } + } + _packageList.Clear(); + _packageInstById.Clear(); + _packageInstByName.Clear(); + } + + /// + /// + /// + /// + public static List GetPackages() + { + return _packageList; + } + + /// + /// Create a UI object. + /// + /// Package name. + /// Resource name. + /// A UI object. + public static GObject CreateObject(string pkgName, string resName) + { + UIPackage pkg = GetByName(pkgName); + if (pkg != null) + return pkg.CreateObject(resName); + else + return null; + } + + /// + /// Create a UI object. + /// + /// Package name. + /// Resource name. + /// Custom implementation of this object. + /// A UI object. + public static GObject CreateObject(string pkgName, string resName, System.Type userClass) + { + UIPackage pkg = GetByName(pkgName); + if (pkg != null) + return pkg.CreateObject(resName, userClass); + else + return null; + } + + /// + /// Create a UI object. + /// + /// Resource url. + /// A UI object. + public static GObject CreateObjectFromURL(string url) + { + PackageItem pi = GetItemByURL(url); + if (pi != null) + return pi.owner.CreateObject(pi, null); + else + return null; + } + + /// + /// Create a UI object. + /// + /// Resource url. + /// Custom implementation of this object. + /// A UI object. + public static GObject CreateObjectFromURL(string url, System.Type userClass) + { + PackageItem pi = GetItemByURL(url); + if (pi != null) + return pi.owner.CreateObject(pi, userClass); + else + return null; + } + + public static void CreateObjectAsync(string pkgName, string resName, CreateObjectCallback callback) + { + UIPackage pkg = GetByName(pkgName); + if (pkg != null) + pkg.CreateObjectAsync(resName, callback); + else + Debug.LogError("FairyGUI: package not found - " + pkgName); + } + + public static void CreateObjectFromURL(string url, CreateObjectCallback callback) + { + PackageItem pi = GetItemByURL(url); + if (pi != null) + AsyncCreationHelper.CreateObject(pi, callback); + else + Debug.LogError("FairyGUI: resource not found - " + url); + } + + /// + /// Get a asset with a certain name. + /// + /// Package name. + /// Resource name. + /// If resource is atlas, returns NTexture; If resource is sound, returns AudioClip. + public static object GetItemAsset(string pkgName, string resName) + { + UIPackage pkg = GetByName(pkgName); + if (pkg != null) + return pkg.GetItemAsset(resName); + else + return null; + } + + /// + /// Get a asset with a certain name. + /// + /// Resource url. + /// If resource is atlas, returns NTexture; If resource is sound, returns AudioClip. + public static object GetItemAssetByURL(string url) + { + PackageItem item = GetItemByURL(url); + if (item == null) + return null; + + return item.owner.GetItemAsset(item); + } + + /// + /// Get url of an item in package. + /// + /// Package name. + /// Resource name. + /// Url. + public static string GetItemURL(string pkgName, string resName) + { + UIPackage pkg = GetByName(pkgName); + if (pkg == null) + return null; + + PackageItem pi; + if (!pkg._itemsByName.TryGetValue(resName, out pi)) + return null; + + return URL_PREFIX + pkg.id + pi.id; + } + + public static PackageItem GetItemByURL(string url) + { + if (url == null) + return null; + + int pos1 = url.IndexOf("//"); + if (pos1 == -1) + return null; + + int pos2 = url.IndexOf('/', pos1 + 2); + if (pos2 == -1) + { + if (url.Length > 13) + { + string pkgId = url.Substring(5, 8); + UIPackage pkg = GetById(pkgId); + if (pkg != null) + { + string srcId = url.Substring(13); + return pkg.GetItem(srcId); + } + } + } + else + { + string pkgName = url.Substring(pos1 + 2, pos2 - pos1 - 2); + UIPackage pkg = GetByName(pkgName); + if (pkg != null) + { + string srcName = url.Substring(pos2 + 1); + return pkg.GetItemByName(srcName); + } + } + + return null; + } + + /// + /// 将'ui://包名/组件名'转换为以内部id表达的url格式。如果传入的url本身就是内部id格式,则直接返回。 + /// 同时这个方法还带格式检测,如果传入不正确的url,会返回null。 + /// + /// + /// + public static string NormalizeURL(string url) + { + if (url == null) + return null; + + int pos1 = url.IndexOf("//"); + if (pos1 == -1) + return null; + + int pos2 = url.IndexOf('/', pos1 + 2); + if (pos2 == -1) + return url; + else + { + string pkgName = url.Substring(pos1 + 2, pos2 - pos1 - 2); + string srcName = url.Substring(pos2 + 1); + return GetItemURL(pkgName, srcName); + } + } + + /// + /// Set strings source. + /// + /// + public static void SetStringsSource(XML source) + { + TranslationHelper.LoadFromXML(source); + } + + /// + /// + /// + public string assetPath + { + get { return _assetPath; } + } + + /// + /// Set a custom id for package, then you can use it in GetById. + /// + public string customId + { + get { return _customId; } + set + { + if (_customId != null) + _packageInstById.Remove(_customId); + _customId = value; + if (_customId != null) + _packageInstById[_customId] = this; + } + } + + /// + /// + /// + public AssetBundle resBundle + { + get { return _resBundle; } + } + + /// + /// 获得本包依赖的包的id列表 + /// + public Dictionary[] dependencies + { + get { return _dependencies; } + } + + bool LoadPackage(ByteBuffer buffer, string assetNamePrefix) + { + if (buffer.ReadUint() != 0x46475549) + { + if (Application.isPlaying) + throw new Exception("FairyGUI: old package format found in '" + assetNamePrefix + "'"); + else + { + Debug.LogWarning("FairyGUI: old package format found in '" + assetNamePrefix + "'"); + return false; + } + } + + buffer.version = buffer.ReadInt(); + bool ver2 = buffer.version >= 2; + buffer.ReadBool(); //compressed + id = buffer.ReadString(); + name = buffer.ReadString(); + + UIPackage existingPkg; + if (_packageInstById.TryGetValue(id, out existingPkg)) + { + if (name != existingPkg.name) + Debug.LogWarning("FairyGUI: Package conflicts, '" + name + "' and '" + existingPkg.name + "'"); + +#if UNITY_EDITOR + //maybe multiple pkgs in different folder, pefer the one in resources + if (Application.isEditor) + { + if (existingPkg._loadFunc == _loadFromAssetsPath) //old one is outside resources path + existingPkg.Dispose(); //replace the existing + else if (existingPkg._loadFunc == _loadFromResourcesPath && _loadFunc == _loadFromResourcesPath + && _assetPath.Length < existingPkg._assetPath.Length) //both in resources path, pefer short path + existingPkg.Dispose(); //replace the existing + else //keep the existing + return false; + } +#endif + } + + buffer.Skip(20); + int indexTablePos = buffer.position; + int cnt; + + buffer.Seek(indexTablePos, 4); + + cnt = buffer.ReadInt(); + string[] stringTable = new string[cnt]; + for (int i = 0; i < cnt; i++) + stringTable[i] = buffer.ReadString(); + buffer.stringTable = stringTable; + + if (buffer.Seek(indexTablePos, 5)) + { + cnt = buffer.ReadInt(); + for (int i = 0; i < cnt; i++) + { + int index = buffer.ReadUshort(); + int len = buffer.ReadInt(); + stringTable[index] = buffer.ReadString(len); + } + } + + buffer.Seek(indexTablePos, 0); + + cnt = buffer.ReadShort(); + _dependencies = new Dictionary[cnt]; + for (int i = 0; i < cnt; i++) + { + Dictionary kv = new Dictionary(); + kv.Add("id", buffer.ReadS()); + kv.Add("name", buffer.ReadS()); + _dependencies[i] = kv; + } + + bool branchIncluded = false; + if (ver2) + { + cnt = buffer.ReadShort(); + if (cnt > 0) + { + _branches = buffer.ReadSArray(cnt); + if (!string.IsNullOrEmpty(_branch)) + _branchIndex = Array.IndexOf(_branches, _branch); + } + + branchIncluded = cnt > 0; + } + + buffer.Seek(indexTablePos, 1); + + PackageItem pi; + string assetPath; + if (assetNamePrefix.Length > 0) + { + assetPath = Path.GetDirectoryName(assetNamePrefix); + if (assetPath.Length > 0) + assetPath += "/"; + assetNamePrefix = assetNamePrefix + "_"; + } + else + assetPath = string.Empty; + + cnt = buffer.ReadShort(); + for (int i = 0; i < cnt; i++) + { + int nextPos = buffer.ReadInt(); + nextPos += buffer.position; + + pi = new PackageItem(); + pi.owner = this; + pi.type = (PackageItemType)buffer.ReadByte(); + pi.id = buffer.ReadS(); + pi.name = buffer.ReadS(); + buffer.ReadS(); //path + pi.file = buffer.ReadS(); + pi.exported = buffer.ReadBool(); + pi.width = buffer.ReadInt(); + pi.height = buffer.ReadInt(); + + switch (pi.type) + { + case PackageItemType.Image: + { + pi.objectType = ObjectType.Image; + int scaleOption = buffer.ReadByte(); + if (scaleOption == 1) + { + Rect rect = new Rect(); + rect.x = buffer.ReadInt(); + rect.y = buffer.ReadInt(); + rect.width = buffer.ReadInt(); + rect.height = buffer.ReadInt(); + pi.scale9Grid = rect; + + pi.tileGridIndice = buffer.ReadInt(); + } + else if (scaleOption == 2) + pi.scaleByTile = true; + + buffer.ReadBool(); //smoothing + break; + } + + case PackageItemType.MovieClip: + { + buffer.ReadBool(); //smoothing + pi.objectType = ObjectType.MovieClip; + pi.rawData = buffer.ReadBuffer(); + break; + } + + case PackageItemType.Font: + { + pi.rawData = buffer.ReadBuffer(); + break; + } + + case PackageItemType.Component: + { + int extension = buffer.ReadByte(); + if (extension > 0) + pi.objectType = (ObjectType)extension; + else + pi.objectType = ObjectType.Component; + pi.rawData = buffer.ReadBuffer(); + + UIObjectFactory.ResolvePackageItemExtension(pi); + break; + } + + case PackageItemType.Atlas: + case PackageItemType.Sound: + case PackageItemType.Misc: + { + pi.file = assetNamePrefix + pi.file; + break; + } + + case PackageItemType.Spine: + case PackageItemType.DragoneBones: + { + pi.file = assetPath + pi.file; + pi.skeletonAnchor.x = buffer.ReadFloat(); + pi.skeletonAnchor.y = buffer.ReadFloat(); + pi.skeletonLoaders = new HashSet(); + break; + } + } + + if (ver2) + { + string str = buffer.ReadS();//branch + if (str != null) + pi.name = str + "/" + pi.name; + + int branchCnt = buffer.ReadByte(); + if (branchCnt > 0) + { + if (branchIncluded) + pi.branches = buffer.ReadSArray(branchCnt); + else + _itemsById[buffer.ReadS()] = pi; + } + + int highResCnt = buffer.ReadByte(); + if (highResCnt > 0) + pi.highResolution = buffer.ReadSArray(highResCnt); + } + + _items.Add(pi); + _itemsById[pi.id] = pi; + if (pi.name != null) + _itemsByName[pi.name] = pi; + + buffer.position = nextPos; + } + + buffer.Seek(indexTablePos, 2); + + cnt = buffer.ReadShort(); + for (int i = 0; i < cnt; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + string itemId = buffer.ReadS(); + pi = _itemsById[buffer.ReadS()]; + + AtlasSprite sprite = new AtlasSprite(); + sprite.atlas = pi; + sprite.rect.x = buffer.ReadInt(); + sprite.rect.y = buffer.ReadInt(); + sprite.rect.width = buffer.ReadInt(); + sprite.rect.height = buffer.ReadInt(); + sprite.rotated = buffer.ReadBool(); + if (ver2 && buffer.ReadBool()) + { + sprite.offset.x = buffer.ReadInt(); + sprite.offset.y = buffer.ReadInt(); + sprite.originalSize.x = buffer.ReadInt(); + sprite.originalSize.y = buffer.ReadInt(); + } + else if (sprite.rotated) + { + sprite.originalSize.x = sprite.rect.height; + sprite.originalSize.y = sprite.rect.width; + } + else + { + sprite.originalSize.x = sprite.rect.width; + sprite.originalSize.y = sprite.rect.height; + } + + _sprites[itemId] = sprite; + + buffer.position = nextPos; + } + + if (buffer.Seek(indexTablePos, 3)) + { + cnt = buffer.ReadShort(); + for (int i = 0; i < cnt; i++) + { + int nextPos = buffer.ReadInt(); + nextPos += buffer.position; + + if (_itemsById.TryGetValue(buffer.ReadS(), out pi)) + { + if (pi.type == PackageItemType.Image) + { + pi.pixelHitTestData = new PixelHitTestData(); + pi.pixelHitTestData.Load(buffer); + } + } + + buffer.position = nextPos; + } + } + + if (!Application.isPlaying) + _items.Sort(ComparePackageItem); + + return true; + } + + static int ComparePackageItem(PackageItem p1, PackageItem p2) + { + if (p1.name != null && p2.name != null) + return p1.name.CompareTo(p2.name); + else + return 0; + } + + /// + /// + /// + public void LoadAllAssets() + { + int cnt = _items.Count; + for (int i = 0; i < cnt; i++) + GetItemAsset(_items[i]); + } + + /// + /// + /// + public void UnloadAssets() + { + int cnt = _items.Count; + for (int i = 0; i < cnt; i++) + { + PackageItem pi = _items[i]; + if (pi.type == PackageItemType.Atlas) + { + if (pi.texture != null) + pi.texture.Unload(); + } + else if (pi.type == PackageItemType.Sound) + { + if (pi.audioClip != null) + pi.audioClip.Unload(); + } + } + + if (unloadBundleByFGUI && + _resBundle != null) + { + _resBundle.Unload(true); + _resBundle = null; + } + } + + /// + /// + /// + public void ReloadAssets() + { + if (_fromBundle) + throw new Exception("FairyGUI: new bundle must be passed to this function"); + + ReloadAssets(null); + } + + /// + /// + /// + public void ReloadAssets(AssetBundle resBundle) + { + _resBundle = resBundle; + _fromBundle = _resBundle != null; + + int cnt = _items.Count; + for (int i = 0; i < cnt; i++) + { + PackageItem pi = _items[i]; + if (pi.type == PackageItemType.Atlas) + { + if (pi.texture != null && pi.texture.nativeTexture == null) + LoadAtlas(pi); + } + else if (pi.type == PackageItemType.Sound) + { + if (pi.audioClip != null && pi.audioClip.nativeClip == null) + LoadSound(pi); + } + } + } + + void Dispose() + { + int cnt = _items.Count; + for (int i = 0; i < cnt; i++) + { + PackageItem pi = _items[i]; + if (pi.type == PackageItemType.Atlas) + { + if (pi.texture != null) + { + pi.texture.Dispose(); + pi.texture = null; + } + } + else if (pi.type == PackageItemType.Sound) + { + if (pi.audioClip != null) + { + pi.audioClip.Unload(); + pi.audioClip = null; + } + } + } + _items.Clear(); + + if (unloadBundleByFGUI && + _resBundle != null) + { + _resBundle.Unload(true); + _resBundle = null; + } + } + + /// + /// + /// + /// + /// + public GObject CreateObject(string resName) + { + PackageItem pi; + if (!_itemsByName.TryGetValue(resName, out pi)) + { + Debug.LogError("FairyGUI: resource not found - " + resName + " in " + this.name); + return null; + } + + return CreateObject(pi, null); + } + + /// + /// + /// + /// + /// + /// + public GObject CreateObject(string resName, System.Type userClass) + { + PackageItem pi; + if (!_itemsByName.TryGetValue(resName, out pi)) + { + Debug.LogError("FairyGUI: resource not found - " + resName + " in " + this.name); + return null; + } + + return CreateObject(pi, userClass); + } + + public void CreateObjectAsync(string resName, CreateObjectCallback callback) + { + PackageItem pi; + if (!_itemsByName.TryGetValue(resName, out pi)) + { + Debug.LogError("FairyGUI: resource not found - " + resName + " in " + this.name); + return; + } + + AsyncCreationHelper.CreateObject(pi, callback); + } + + GObject CreateObject(PackageItem item, System.Type userClass) + { + Stats.LatestObjectCreation = 0; + Stats.LatestGraphicsCreation = 0; + + GetItemAsset(item); + + GObject g = UIObjectFactory.NewObject(item, userClass); + if (g == null) + return null; + + _constructing++; + g.ConstructFromResource(); + _constructing--; + + return g; + } + + + /// + /// + /// + /// + /// + public object GetItemAsset(string resName) + { + PackageItem pi; + if (!_itemsByName.TryGetValue(resName, out pi)) + { + Debug.LogError("FairyGUI: Resource not found - " + resName + " in " + this.name); + return null; + } + + return GetItemAsset(pi); + } + + public List GetItems() + { + return _items; + } + + public PackageItem GetItem(string itemId) + { + PackageItem pi; + if (_itemsById.TryGetValue(itemId, out pi)) + return pi; + else + return null; + } + + public PackageItem GetItemByName(string itemName) + { + PackageItem pi; + if (_itemsByName.TryGetValue(itemName, out pi)) + return pi; + else + return null; + } + + public object GetItemAsset(PackageItem item) + { + switch (item.type) + { + case PackageItemType.Image: + if (item.texture == null) + LoadImage(item); + return item.texture; + + case PackageItemType.Atlas: + if (item.texture == null) + LoadAtlas(item); + return item.texture; + + case PackageItemType.Sound: + if (item.audioClip == null) + LoadSound(item); + return item.audioClip; + + case PackageItemType.Font: + if (item.bitmapFont == null) + LoadFont(item); + + return item.bitmapFont; + + case PackageItemType.MovieClip: + if (item.frames == null) + LoadMovieClip(item); + + return item.frames; + + case PackageItemType.Component: + return item.rawData; + + case PackageItemType.Misc: + return LoadBinary(item); + + case PackageItemType.Spine: + if (item.skeletonAsset == null) + LoadSpine(item); + return item.skeletonAsset; + + case PackageItemType.DragoneBones: + if (item.skeletonAsset == null) + LoadDragonBones(item); + return item.skeletonAsset; + + default: + return null; + } + } + + /// + /// + /// + /// + /// + /// + public void SetItemAsset(PackageItem item, object asset, DestroyMethod destroyMethod) + { + switch (item.type) + { + case PackageItemType.Atlas: + if (item.texture == null) + item.texture = new NTexture(null, new Rect(0, 0, item.width, item.height)); + item.texture.Reload((Texture)asset, null); + item.texture.destroyMethod = destroyMethod; + break; + + case PackageItemType.Sound: + if (item.audioClip == null) + item.audioClip = new NAudioClip(null); + item.audioClip.Reload((AudioClip)asset); + item.audioClip.destroyMethod = destroyMethod; + break; + + case PackageItemType.Spine: +#if FAIRYGUI_SPINE + item.skeletonAsset = (Spine.Unity.SkeletonDataAsset)asset; + foreach (var gLoader3D in item.skeletonLoaders) + { + if(!gLoader3D.isDisposed) + gLoader3D.SetSpine((Spine.Unity.SkeletonDataAsset) item.skeletonAsset); + } + item.skeletonLoaders.Clear(); +#endif + break; + + case PackageItemType.DragoneBones: +#if FAIRYGUI_DRAGONBONES + item.skeletonAsset = (DragonBones.UnityDragonBonesData)asset; +#endif + break; + } + } + + void LoadAtlas(PackageItem item) + { + string ext = Path.GetExtension(item.file); + string fileName = item.file.Substring(0, item.file.Length - ext.Length); + + if (_loadAsyncFunc != null) + { + _loadAsyncFunc(fileName, ext, typeof(Texture), item); + if (item.texture == null) + item.texture = new NTexture(null, new Rect(0, 0, item.width, item.height)); + item.texture.destroyMethod = DestroyMethod.None; + } + else + { + Texture tex = null; + Texture alphaTex = null; + DestroyMethod dm; + + if (_fromBundle) + { + if (_resBundle != null) + tex = _resBundle.LoadAsset(fileName); + else + Debug.LogWarning("FairyGUI: bundle already unloaded."); + + dm = DestroyMethod.None; + } + else + tex = (Texture)_loadFunc(fileName, ext, typeof(Texture), out dm); + + if (tex == null) + Debug.LogWarning("FairyGUI: texture '" + item.file + "' not found in " + this.name); + + else if (!(tex is Texture2D)) + { + Debug.LogWarning("FairyGUI: settings for '" + item.file + "' is wrong! Correct values are: (Texture Type=Default, Texture Shape=2D)"); + tex = null; + } + else + { + if (((Texture2D)tex).mipmapCount > 1) + Debug.LogWarning("FairyGUI: settings for '" + item.file + "' is wrong! Correct values are: (Generate Mip Maps=unchecked)"); + } + +#if FAIRYGUI_USE_ALPHA_TEXTURE + if (tex != null) + { + fileName = fileName + "!a"; + if (_fromBundle) + { + if (_resBundle != null) + alphaTex = _resBundle.LoadAsset(fileName); + } + else + alphaTex = (Texture2D)_loadFunc(fileName, ext, typeof(Texture2D), out dm); + } +#endif + + if (tex == null) + { + tex = NTexture.CreateEmptyTexture(); + dm = DestroyMethod.Destroy; + } + + if (item.texture == null) + { + item.texture = new NTexture(tex, alphaTex, (float)tex.width / item.width, (float)tex.height / item.height); + item.texture.onRelease += (NTexture t) => + { + if (onReleaseResource != null) + onReleaseResource(item); + }; + } + else + item.texture.Reload(tex, alphaTex); + item.texture.destroyMethod = dm; + } + } + + void LoadImage(PackageItem item) + { + AtlasSprite sprite; + if (_sprites.TryGetValue(item.id, out sprite)) + { + NTexture atlas = (NTexture)GetItemAsset(sprite.atlas); + if (atlas.width == sprite.rect.width && atlas.height == sprite.rect.height) + item.texture = atlas; + else + item.texture = new NTexture(atlas, sprite.rect, sprite.rotated, sprite.originalSize, sprite.offset); + } + else + item.texture = NTexture.Empty; + } + + void LoadSound(PackageItem item) + { + string ext = Path.GetExtension(item.file); + string fileName = item.file.Substring(0, item.file.Length - ext.Length); + + if (_loadAsyncFunc != null) + { + _loadAsyncFunc(fileName, ext, typeof(AudioClip), item); + if (item.audioClip == null) + item.audioClip = new NAudioClip(null); + item.audioClip.destroyMethod = DestroyMethod.None; + } + else + { + AudioClip audioClip = null; + DestroyMethod dm; + + if (_fromBundle) + { + if (_resBundle != null) + audioClip = _resBundle.LoadAsset(fileName); + dm = DestroyMethod.None; + } + else + { + audioClip = (AudioClip)_loadFunc(fileName, ext, typeof(AudioClip), out dm); + } + + if (item.audioClip == null) + item.audioClip = new NAudioClip(audioClip); + else + item.audioClip.Reload(audioClip); + item.audioClip.destroyMethod = dm; + } + } + + byte[] LoadBinary(PackageItem item) + { + string ext = Path.GetExtension(item.file); + string fileName = item.file.Substring(0, item.file.Length - ext.Length); + + TextAsset ta; + if (_resBundle != null) + { + ta = _resBundle.LoadAsset(fileName); + if (ta != null) + return ta.bytes; + else + return null; + } + else + { + DestroyMethod dm; + object ret = _loadFunc(fileName, ext, typeof(TextAsset), out dm); + if (ret == null) + return null; + if (ret is byte[]) + return (byte[])ret; + else + return ((TextAsset)ret).bytes; + } + } + + void LoadMovieClip(PackageItem item) + { + ByteBuffer buffer = item.rawData; + + buffer.Seek(0, 0); + + item.interval = buffer.ReadInt() / 1000f; + item.swing = buffer.ReadBool(); + item.repeatDelay = buffer.ReadInt() / 1000f; + + buffer.Seek(0, 1); + + int frameCount = buffer.ReadShort(); + item.frames = new MovieClip.Frame[frameCount]; + + string spriteId; + MovieClip.Frame frame; + AtlasSprite sprite; + Rect frameRect = new Rect(); + + for (int i = 0; i < frameCount; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + frame = new MovieClip.Frame(); + frameRect.x = buffer.ReadInt(); + frameRect.y = buffer.ReadInt(); + frameRect.width = buffer.ReadInt(); + frameRect.height = buffer.ReadInt(); + frame.addDelay = buffer.ReadInt() / 1000f; + spriteId = buffer.ReadS(); + + if (spriteId != null && _sprites.TryGetValue(spriteId, out sprite)) + { + frame.texture = new NTexture((NTexture)GetItemAsset(sprite.atlas), sprite.rect, sprite.rotated, + new Vector2(item.width, item.height), frameRect.position); + } + item.frames[i] = frame; + + buffer.position = nextPos; + } + } + + void LoadFont(PackageItem item) + { + BitmapFont font = new BitmapFont(); + font.name = URL_PREFIX + this.id + item.id; + item.bitmapFont = font; + ByteBuffer buffer = item.rawData; + + buffer.Seek(0, 0); + + bool ttf = buffer.ReadBool(); + font.canTint = buffer.ReadBool(); + font.resizable = buffer.ReadBool(); + font.hasChannel = buffer.ReadBool(); + int fontSize = buffer.ReadInt(); + int xadvance = buffer.ReadInt(); + int lineHeight = buffer.ReadInt(); + + float texScaleX = 1; + float texScaleY = 1; + int bgX; + int bgY; + int bgWidth; + int bgHeight; + + NTexture mainTexture = null; + AtlasSprite mainSprite = null; + if (ttf && _sprites.TryGetValue(item.id, out mainSprite)) + { + mainTexture = (NTexture)GetItemAsset(mainSprite.atlas); + texScaleX = mainTexture.root.uvRect.width / mainTexture.width; + texScaleY = mainTexture.root.uvRect.height / mainTexture.height; + } + + buffer.Seek(0, 1); + + BitmapFont.BMGlyph bg; + int cnt = buffer.ReadInt(); + for (int i = 0; i < cnt; i++) + { + int nextPos = buffer.ReadUshort(); + nextPos += buffer.position; + + bg = new BitmapFont.BMGlyph(); + char ch = buffer.ReadChar(); + font.AddChar(ch, bg); + + string img = buffer.ReadS(); + int bx = buffer.ReadInt(); + int by = buffer.ReadInt(); + bgX = buffer.ReadInt(); + bgY = buffer.ReadInt(); + bgWidth = buffer.ReadInt(); + bgHeight = buffer.ReadInt(); + bg.advance = buffer.ReadInt(); + bg.channel = buffer.ReadByte(); + //The texture channel where the character image is found (1 = blue, 2 = green, 4 = red, 8 = alpha, 15-all). + if (bg.channel == 1) + bg.channel = 2; + else if (bg.channel == 2) + bg.channel = 1; + else if (bg.channel == 4) + bg.channel = 0; + else if (bg.channel == 8) + bg.channel = 3; + + if (ttf) + { + if (mainSprite.rotated) + { + bg.uv[0] = new Vector2((float)(by + bgHeight + mainSprite.rect.x) * texScaleX, + 1 - (float)(mainSprite.rect.yMax - bx) * texScaleY); + bg.uv[1] = new Vector2(bg.uv[0].x - (float)bgHeight * texScaleX, bg.uv[0].y); + bg.uv[2] = new Vector2(bg.uv[1].x, bg.uv[0].y + (float)bgWidth * texScaleY); + bg.uv[3] = new Vector2(bg.uv[0].x, bg.uv[2].y); + } + else + { + bg.uv[0] = new Vector2((float)(bx + mainSprite.rect.x) * texScaleX, + 1 - (float)(by + bgHeight + mainSprite.rect.y) * texScaleY); + bg.uv[1] = new Vector2(bg.uv[0].x, bg.uv[0].y + (float)bgHeight * texScaleY); + bg.uv[2] = new Vector2(bg.uv[0].x + (float)bgWidth * texScaleX, bg.uv[1].y); + bg.uv[3] = new Vector2(bg.uv[2].x, bg.uv[0].y); + } + + bg.lineHeight = lineHeight; + bg.x = bgX; + bg.y = bgY; + bg.width = bgWidth; + bg.height = bgHeight; + } + else + { + PackageItem charImg; + if (_itemsById.TryGetValue(img, out charImg)) + { + charImg = charImg.getBranch(); + bgWidth = charImg.width; + bgHeight = charImg.height; + charImg = charImg.getHighResolution(); + GetItemAsset(charImg); + charImg.texture.GetUV(bg.uv); + + texScaleX = (float)bgWidth / charImg.width; + texScaleY = (float)bgHeight / charImg.height; + + bg.x = bgX + charImg.texture.offset.x * texScaleX; + bg.y = bgY + charImg.texture.offset.y * texScaleY; + bg.width = charImg.texture.width * texScaleX; + bg.height = charImg.texture.height * texScaleY; + + if (mainTexture == null) + mainTexture = charImg.texture.root; + } + + if (fontSize == 0) + fontSize = bgHeight; + + if (bg.advance == 0) + { + if (xadvance == 0) + bg.advance = bgX + bgWidth; + else + bg.advance = xadvance; + } + + bg.lineHeight = bgY < 0 ? bgHeight : (bgY + bgHeight); + if (bg.lineHeight < fontSize) + bg.lineHeight = fontSize; + } + + buffer.position = nextPos; + } + + font.size = fontSize; + font.mainTexture = mainTexture; + if (!font.hasChannel) + font.shader = ShaderConfig.imageShader; + } + + void LoadSpine(PackageItem item) + { + string ext = Path.GetExtension(item.file); + string fileName = item.file.Substring(0, item.file.Length - ext.Length); + int index = fileName.LastIndexOf(".skel"); + if (index > 0) + fileName = fileName.Substring(0, index); + +#if FAIRYGUI_SPINE + if (_loadAsyncFunc != null) + { + _loadAsyncFunc(fileName + "_SkeletonData", ".asset", typeof(Spine.Unity.SkeletonDataAsset), item); + } + else + { + Spine.Unity.SkeletonDataAsset asset; + if (_resBundle != null) + asset = _resBundle.LoadAsset(fileName); + else + { + DestroyMethod dm; + asset = (Spine.Unity.SkeletonDataAsset)_loadFunc(fileName + "_SkeletonData", ".asset", typeof(Spine.Unity.SkeletonDataAsset), out dm); + } + if (asset == null) + Debug.LogWarning("FairyGUI: Failed to load " + fileName); + item.skeletonAsset = asset; + } +#else + Debug.LogWarning("To enable Spine support, add script define symbol: FAIRYGUI_SPINE"); +#endif + } + + void LoadDragonBones(PackageItem item) + { +#if FAIRYGUI_DRAGONBONES + string ext = Path.GetExtension(item.file); + string fileName = item.file.Substring(0, item.file.Length - ext.Length); + int index = fileName.LastIndexOf("_ske"); + if (index > 0) + fileName = fileName.Substring(0, index); + index = fileName.LastIndexOf(".dbbin"); + if (index > 0) + fileName = fileName.Substring(0, index); + + DragonBones.UnityDragonBonesData asset; + if (_resBundle != null) + asset = _resBundle.LoadAsset(fileName + "_Data"); + else + { + DestroyMethod dm; + asset = (DragonBones.UnityDragonBonesData)_loadFunc(fileName + "_Data", ".asset", typeof(DragonBones.UnityDragonBonesData), out dm); + } + if (asset != null) + { + foreach (var atlas in asset.textureAtlas) + { + if (atlas.material == null) + { + atlas.material = new Material(ShaderConfig.GetShader(ShaderConfig.imageShader)); + atlas.material.mainTexture = atlas.texture; + } + } + item.skeletonAsset = DragonBones.UnityFactory.factory.LoadData(asset); + } + else + Debug.LogWarning("FairyGUI: Failed to load " + fileName); +#else + Debug.LogWarning("To enable DragonBones support, add script define symbol: FAIRYGUI_DRAGONBONES"); +#endif + } + + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + RemoveAllPackages(); + UIPackage.branch = null; + } +#endif + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs.meta new file mode 100644 index 0000000..92e40a4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIPackage.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7177aa7a57b8cc0439fde7785099f11c +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs new file mode 100644 index 0000000..d7e9130 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs @@ -0,0 +1,335 @@ +using System; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// + /// + [ExecuteInEditMode] + [AddComponentMenu("FairyGUI/UI Painter")] + [RequireComponent(typeof(MeshCollider), typeof(MeshRenderer))] + public class UIPainter : MonoBehaviour, EMRenderTarget + { + /// + /// + /// + public Container container { get; private set; } + + /// + /// + /// + public string packageName; + + /// + /// + /// + public string componentName; + + /// + /// + /// + public int sortingOrder; + + [SerializeField] + string packagePath; + [SerializeField] + Camera renderCamera = null; + [SerializeField] + bool fairyBatching = false; + [SerializeField] + bool touchDisabled = false; + + GComponent _ui; + [NonSerialized] + bool _created; + [NonSerialized] + bool _captured; + [NonSerialized] + Renderer _renderer; + + [NonSerialized] + RenderTexture _texture; + + Action _captureDelegate; + + void OnEnable() + { + if (Application.isPlaying) + { + if (this.container == null) + { + CreateContainer(); + + if (!string.IsNullOrEmpty(packagePath) && UIPackage.GetByName(packageName) == null) + UIPackage.AddPackage(packagePath); + } + } + else + { + EMRenderSupport.Add(this); + } + } + + void OnDisable() + { + if (!Application.isPlaying) + EMRenderSupport.Remove(this); + } + + void OnGUI() + { + if (!Application.isPlaying) + EM_BeforeUpdate(); + } + + void Start() + { + useGUILayout = false; + + if (!_created && Application.isPlaying) + CreateUI(); + } + + void OnDestroy() + { + if (Application.isPlaying) + { + if (_ui != null) + { + _ui.Dispose(); + _ui = null; + } + + container.Dispose(); + container = null; + } + else + { + EMRenderSupport.Remove(this); + } + + DestroyTexture(); + } + + void CreateContainer() + { + this.container = new Container("UIPainter"); + this.container.renderMode = RenderMode.WorldSpace; + this.container.renderCamera = renderCamera; + this.container.touchable = !touchDisabled; + this.container.fairyBatching = fairyBatching; + this.container._panelOrder = sortingOrder; + this.container.hitArea = new MeshColliderHitTest(this.gameObject.GetComponent()); + SetSortingOrder(this.sortingOrder, true); + this.container.layer = CaptureCamera.hiddenLayer; + } + + /// + /// Change the sorting order of the panel in runtime. + /// + /// sorting order value + /// false if you dont want the default sorting behavior. + public void SetSortingOrder(int value, bool apply) + { + this.sortingOrder = value; + container._panelOrder = value; + + if (apply) + Stage.inst.ApplyPanelOrder(container); + } + + /// + /// + /// + public GComponent ui + { + get + { + if (!_created && Application.isPlaying) + CreateUI(); + + return _ui; + } + } + + /// + /// + /// + public void CreateUI() + { + if (_ui != null) + { + _ui.Dispose(); + _ui = null; + DestroyTexture(); + } + + _created = true; + + if (string.IsNullOrEmpty(packageName) || string.IsNullOrEmpty(componentName)) + return; + + _ui = (GComponent)UIPackage.CreateObject(packageName, componentName); + if (_ui != null) + { + this.container.AddChild(_ui.displayObject); + this.container.size = _ui.size; + _texture = CaptureCamera.CreateRenderTexture(Mathf.RoundToInt(_ui.width), Mathf.RoundToInt(_ui.height), UIConfig.depthSupportForPaintingMode); + _renderer = this.GetComponent(); + if (_renderer != null) + { + _renderer.sharedMaterial.mainTexture = _texture; + _captureDelegate = Capture; + if (_renderer.sharedMaterial.renderQueue == 3000) //Set in transpare queue only + { + this.container.onUpdate += () => + { + UpdateContext.OnEnd += _captureDelegate; + }; + } + } + } + else + Debug.LogError("Create " + componentName + "@" + packageName + " failed!"); + } + + void Capture() + { + CaptureCamera.Capture(this.container, _texture, this.container.size.y, Vector2.zero); + if (_renderer != null) + _renderer.sortingOrder = container.renderingOrder; + } + + void DestroyTexture() + { + if (_texture != null) + { + if (Application.isPlaying) + RenderTexture.Destroy(_texture); + else + RenderTexture.DestroyImmediate(_texture); + _texture = null; + + if (_renderer != null) + _renderer.sharedMaterial.mainTexture = null; + } + } + + #region edit mode functions + + void CaptureInEditMode() + { + if (!EMRenderSupport.packageListReady || UIPackage.GetByName(packageName) == null) + return; + + _captured = true; + + DisplayObject.hideFlags = HideFlags.DontSaveInEditor; + GComponent view = (GComponent)UIPackage.CreateObject(packageName, componentName); + + if (view != null) + { + DestroyTexture(); + + _texture = CaptureCamera.CreateRenderTexture(Mathf.RoundToInt(view.width), Mathf.RoundToInt(view.height), false); + + Container root = (Container)view.displayObject; + root.layer = CaptureCamera.layer; + root.gameObject.hideFlags = HideFlags.None; + root.gameObject.SetActive(true); + + GameObject cameraObject = new GameObject("Temp Capture Camera"); + Camera camera = cameraObject.AddComponent(); + camera.depth = 0; + camera.cullingMask = 1 << CaptureCamera.layer; + camera.clearFlags = CameraClearFlags.Depth; + camera.orthographic = true; + camera.nearClipPlane = -30; + camera.farClipPlane = 30; + camera.enabled = false; + camera.targetTexture = _texture; + + float halfHeight = (float)_texture.height / 2; + camera.orthographicSize = halfHeight; + cameraObject.transform.localPosition = root.cachedTransform.TransformPoint(halfHeight * camera.aspect, -halfHeight, 0); + + UpdateContext context = new UpdateContext(); + //run two times + context.Begin(); + view.displayObject.Update(context); + context.End(); + + context.Begin(); + view.displayObject.Update(context); + context.End(); + + RenderTexture old = RenderTexture.active; + RenderTexture.active = _texture; + GL.Clear(true, true, Color.clear); + camera.Render(); + RenderTexture.active = old; + + camera.targetTexture = null; + view.Dispose(); + GameObject.DestroyImmediate(cameraObject); + + if (_renderer != null) + _renderer.sharedMaterial.mainTexture = _texture; + } + } + + public void ApplyModifiedProperties(bool sortingOrderChanged) + { + if (sortingOrderChanged) + { + if (Application.isPlaying) + SetSortingOrder(sortingOrder, true); + else + EMRenderSupport.orderChanged = true; + } + } + + public void OnUpdateSource(object[] data) + { + if (Application.isPlaying) + return; + + this.packageName = (string)data[0]; + this.packagePath = (string)data[1]; + this.componentName = (string)data[2]; + + if ((bool)data[3]) + _captured = false; + } + + public int EM_sortingOrder + { + get { return sortingOrder; } + } + + public void EM_BeforeUpdate() + { + if (_renderer == null) + _renderer = this.GetComponent(); + if (_renderer != null && _renderer.sharedMaterial.mainTexture != _texture) + _renderer.sharedMaterial.mainTexture = _texture; + + if (packageName != null && componentName != null && !_captured) + CaptureInEditMode(); + } + + public void EM_Update(UpdateContext context) + { + if (_renderer != null) + _renderer.sortingOrder = context.renderingOrder++; + } + + public void EM_Reload() + { + _captured = false; + } + + #endregion + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs.meta new file mode 100644 index 0000000..df36846 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIPainter.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2ca66c39de4dce2499306801170a139f +timeCreated: 1461566422 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs b/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs new file mode 100644 index 0000000..ce29190 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs @@ -0,0 +1,622 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace FairyGUI +{ + /// + /// + /// + public enum FitScreen + { + None, + FitSize, + FitWidthAndSetMiddle, + FitHeightAndSetCenter + } + + /// + /// + /// + [ExecuteInEditMode] + [AddComponentMenu("FairyGUI/UI Panel")] + public class UIPanel : MonoBehaviour, EMRenderTarget + { + /// + /// + /// + public Container container { get; private set; } + + /// + /// + /// + public string packageName; + + /// + /// + /// + public string componentName; + + /// + /// + /// + public FitScreen fitScreen; + + /// + /// + /// + public int sortingOrder; + + [SerializeField] + string packagePath; + [SerializeField] + RenderMode renderMode = RenderMode.ScreenSpaceOverlay; + [SerializeField] + Camera renderCamera = null; + [SerializeField] + Vector3 position; + [SerializeField] + Vector3 scale = new Vector3(1, 1, 1); + [SerializeField] + Vector3 rotation = new Vector3(0, 0, 0); + [SerializeField] + bool fairyBatching = false; + [SerializeField] + bool touchDisabled = false; + [SerializeField] + Vector2 cachedUISize; + [SerializeField] + HitTestMode hitTestMode = HitTestMode.Default; + [SerializeField] + bool setNativeChildrenOrder = false; + + [System.NonSerialized] + int screenSizeVer; + [System.NonSerialized] + Rect uiBounds; //Track bounds even when UI is not created, edit mode + + GComponent _ui; + [NonSerialized] + bool _created; + + List _renders; + + void OnEnable() + { + if (Application.isPlaying) + { + if (this.container == null) + { + CreateContainer(); + + if (!string.IsNullOrEmpty(packagePath) && UIPackage.GetByName(packageName) == null) + UIPackage.AddPackage(packagePath); + } + } + else + { + //不在播放状态时我们不在OnEnable创建,因为Prefab也会调用OnEnable,延迟到Update里创建(Prefab不调用Update) + //每次播放前都会disable/enable一次。。。 + if (container != null)//如果不为null,可能是因为Prefab revert, 而不是因为Assembly reload, + OnDestroy(); + + EMRenderSupport.Add(this); + screenSizeVer = 0; + uiBounds.position = position; + uiBounds.size = cachedUISize; + if (uiBounds.size == Vector2.zero) + uiBounds.size = new Vector2(30, 30); + } + } + + void OnDisable() + { + if (!Application.isPlaying) + EMRenderSupport.Remove(this); + } + + void Start() + { + if (!_created && Application.isPlaying) + CreateUI_PlayMode(); + } + + void Update() + { + if (screenSizeVer != StageCamera.screenSizeVer) + HandleScreenSizeChanged(); + } + + void OnDestroy() + { + if (container != null) + { + if (!Application.isPlaying) + EMRenderSupport.Remove(this); + + if (_ui != null) + { + _ui.Dispose(); + _ui = null; + } + + container.Dispose(); + container = null; + } + + _renders = null; + } + + void CreateContainer() + { + if (!Application.isPlaying) + { + Transform t = this.transform; + int cnt = t.childCount; + while (cnt > 0) + { + GameObject go = t.GetChild(cnt - 1).gameObject; + if (go.name == "UI(AutoGenerated)") + { +#if (UNITY_2018_3_OR_NEWER && UNITY_EDITOR) + if (PrefabUtility.IsPartOfPrefabInstance(go)) + PrefabUtility.UnpackPrefabInstance(PrefabUtility.GetOutermostPrefabInstanceRoot(gameObject), PrefabUnpackMode.Completely, InteractionMode.AutomatedAction); +#endif + UnityEngine.Object.DestroyImmediate(go); + } + cnt--; + } + } + + this.container = new Container(this.gameObject); + this.container.renderMode = renderMode; + this.container.renderCamera = renderCamera; + this.container.touchable = !touchDisabled; + this.container._panelOrder = sortingOrder; + this.container.fairyBatching = fairyBatching; + if (Application.isPlaying) + { + SetSortingOrder(this.sortingOrder, true); + if (this.hitTestMode == HitTestMode.Raycast) + { + ColliderHitTest hitArea = new ColliderHitTest(); + hitArea.collider = this.gameObject.AddComponent(); + this.container.hitArea = hitArea; + } + + if (setNativeChildrenOrder) + { + CacheNativeChildrenRenderers(); + + this.container.onUpdate += () => + { + int cnt = _renders.Count; + int sv = UpdateContext.current.renderingOrder++; + for (int i = 0; i < cnt; i++) + { + Renderer r = _renders[i]; + if (r != null) + _renders[i].sortingOrder = sv; + } + }; + } + } + } + + /// + /// + /// + public GComponent ui + { + get + { + if (!_created && Application.isPlaying) + { + if (!string.IsNullOrEmpty(packagePath) && UIPackage.GetByName(packageName) == null) + UIPackage.AddPackage(packagePath); + + CreateUI_PlayMode(); + } + + return _ui; + } + } + + /// + /// + /// + public void CreateUI() + { + if (_ui != null) + { + _ui.Dispose(); + _ui = null; + } + + CreateUI_PlayMode(); + } + + /// + /// Change the sorting order of the panel in runtime. + /// + /// sorting order value + /// false if you dont want the default sorting behavior. e.g. call Stage.SortWorldSpacePanelsByZOrder later. + public void SetSortingOrder(int value, bool apply) + { + this.sortingOrder = value; + container._panelOrder = value; + + if (apply) + Stage.inst.ApplyPanelOrder(container); + } + + /// + /// + /// + /// + public void SetHitTestMode(HitTestMode value) + { + if (this.hitTestMode != value) + { + this.hitTestMode = value; + BoxCollider collider = this.gameObject.GetComponent(); + if (this.hitTestMode == HitTestMode.Raycast) + { + if (collider == null) + collider = this.gameObject.AddComponent(); + ColliderHitTest hitArea = new ColliderHitTest(); + hitArea.collider = collider; + this.container.hitArea = hitArea; + if (_ui != null) + UpdateHitArea(); + } + else + { + this.container.hitArea = null; + if (collider != null) + Component.Destroy(collider); + } + } + } + + /// + /// + /// + public void CacheNativeChildrenRenderers() + { + if (_renders == null) + _renders = new List(); + else + _renders.Clear(); + + Transform t = this.container.cachedTransform; + int cnt = t.childCount; + for (int i = 0; i < cnt; i++) + { + GameObject go = t.GetChild(i).gameObject; + if (go.name != "GComponent") + _renders.AddRange(go.GetComponentsInChildren(true)); + } + + cnt = _renders.Count; + for (int i = 0; i < cnt; i++) + { + Renderer r = _renders[i]; + if ((r is SkinnedMeshRenderer) || (r is MeshRenderer)) + { + //Set the object rendering in Transparent Queue as UI objects + if (r.sharedMaterial != null) + r.sharedMaterial.renderQueue = 3000; + } + } + } + + void CreateUI_PlayMode() + { + _created = true; + + if (string.IsNullOrEmpty(packageName) || string.IsNullOrEmpty(componentName)) + return; + + _ui = (GComponent)UIPackage.CreateObject(packageName, componentName); + if (_ui != null) + { + _ui.position = position; + if (scale.x != 0 && scale.y != 0) + _ui.scale = scale; + _ui.rotationX = rotation.x; + _ui.rotationY = rotation.y; + _ui.rotation = rotation.z; + if (this.container.hitArea != null) + { + UpdateHitArea(); + _ui.onSizeChanged.Add(UpdateHitArea); + _ui.onPositionChanged.Add(UpdateHitArea); + } + this.container.AddChildAt(_ui.displayObject, 0); + + HandleScreenSizeChanged(); + } + else + Debug.LogError("Create " + packageName + "/" + componentName + " failed!"); + } + + void UpdateHitArea() + { + ColliderHitTest hitArea = this.container.hitArea as ColliderHitTest; + if (hitArea != null) + { + ((BoxCollider)hitArea.collider).center = new Vector3(_ui.xMin + _ui.width / 2, -_ui.yMin - _ui.height / 2); + ((BoxCollider)hitArea.collider).size = _ui.size; + } + } + + void CreateUI_EditMode() + { + if (!EMRenderSupport.packageListReady || UIPackage.GetByName(packageName) == null) + return; + + + DisplayObject.hideFlags = HideFlags.DontSaveInEditor; + GObject obj = UIPackage.CreateObject(packageName, componentName); + if (obj != null && !(obj is GComponent)) + { + obj.Dispose(); + Debug.LogWarning("Not a GComponnet: " + packageName + "/" + componentName); + return; + } + _ui = (GComponent)obj; + + if (_ui != null) + { + _ui.displayObject.gameObject.hideFlags |= HideFlags.HideInHierarchy; + _ui.gameObjectName = "UI(AutoGenerated)"; + + _ui.position = position; + if (scale.x != 0 && scale.y != 0) + _ui.scale = scale; + _ui.rotationX = rotation.x; + _ui.rotationY = rotation.y; + _ui.rotation = rotation.z; + this.container.AddChildAt(_ui.displayObject, 0); + + cachedUISize = _ui.size; + uiBounds.size = cachedUISize; + HandleScreenSizeChanged(); + } + } + + void HandleScreenSizeChanged() + { + if (!Application.isPlaying) + DisplayObject.hideFlags = HideFlags.DontSaveInEditor; + + screenSizeVer = StageCamera.screenSizeVer; + + int width = Screen.width; + int height = Screen.height; + if (this.container != null) + { + Camera cam = container.GetRenderCamera(); + if (cam.targetDisplay != 0 && cam.targetDisplay < Display.displays.Length) + { + width = Display.displays[cam.targetDisplay].renderingWidth; + height = Display.displays[cam.targetDisplay].renderingHeight; + } + + if (this.container.renderMode != RenderMode.WorldSpace) + { + StageCamera sc = cam.GetComponent(); + if (sc == null) + sc = StageCamera.main.GetComponent(); + this.container.scale = new Vector2(sc.unitsPerPixel * UIContentScaler.scaleFactor, sc.unitsPerPixel * UIContentScaler.scaleFactor); + } + } + + width = Mathf.CeilToInt(width / UIContentScaler.scaleFactor); + height = Mathf.CeilToInt(height / UIContentScaler.scaleFactor); + if (_ui != null) + { + switch (fitScreen) + { + case FitScreen.FitSize: + _ui.SetSize(width, height); + _ui.SetXY(0, 0, true); + break; + + case FitScreen.FitWidthAndSetMiddle: + _ui.SetSize(width, _ui.sourceHeight); + _ui.SetXY(0, (int)((height - _ui.sourceHeight) / 2), true); + break; + + case FitScreen.FitHeightAndSetCenter: + _ui.SetSize(_ui.sourceWidth, height); + _ui.SetXY((int)((width - _ui.sourceWidth) / 2), 0, true); + break; + } + + UpdateHitArea(); + } + else + { + switch (fitScreen) + { + case FitScreen.FitSize: + uiBounds.position = new Vector2(0, 0); + uiBounds.size = new Vector2(width, height); + break; + + case FitScreen.FitWidthAndSetMiddle: + uiBounds.position = new Vector2(0, (int)((height - cachedUISize.y) / 2)); + uiBounds.size = new Vector2(width, cachedUISize.y); + break; + + case FitScreen.FitHeightAndSetCenter: + uiBounds.position = new Vector2((int)((width - cachedUISize.x) / 2), 0); + uiBounds.size = new Vector2(cachedUISize.x, height); + break; + } + } + } + + #region edit mode functions + + void OnUpdateSource(object[] data) + { + if (Application.isPlaying) + return; + + this.packageName = (string)data[0]; + this.packagePath = (string)data[1]; + this.componentName = (string)data[2]; + + if ((bool)data[3]) + { + if (container == null) + return; + + if (_ui != null) + { + _ui.Dispose(); + _ui = null; + } + } + } + + public void ApplyModifiedProperties(bool sortingOrderChanged, bool fitScreenChanged) + { + if (container != null) + { + container.renderMode = renderMode; + container.renderCamera = renderCamera; + if (sortingOrderChanged) + { + container._panelOrder = sortingOrder; + if (Application.isPlaying) + SetSortingOrder(sortingOrder, true); + else + EMRenderSupport.orderChanged = true; + } + container.fairyBatching = fairyBatching; + } + + if (_ui != null) + { + if (fitScreen == FitScreen.None) + _ui.position = position; + if (scale.x != 0 && scale.y != 0) + _ui.scale = scale; + _ui.rotationX = rotation.x; + _ui.rotationY = rotation.y; + _ui.rotation = rotation.z; + } + if (fitScreen == FitScreen.None) + uiBounds.position = position; + screenSizeVer = 0;//force HandleScreenSizeChanged be called + + if (fitScreenChanged && this.fitScreen == FitScreen.None) + { + if (_ui != null) + _ui.SetSize(_ui.sourceWidth, _ui.sourceHeight); + uiBounds.size = cachedUISize; + } + } + + public void MoveUI(Vector3 delta) + { + if (fitScreen != FitScreen.None) + return; + + this.position += delta; + if (_ui != null) + _ui.position = position; + uiBounds.position = position; + } + + public Vector3 GetUIWorldPosition() + { + if (_ui != null) + return _ui.displayObject.cachedTransform.position; + else + return this.container.cachedTransform.TransformPoint(uiBounds.position); + } + + void OnDrawGizmos() + { + if (Application.isPlaying || this.container == null) + return; + + Vector3 pos, size; + if (_ui != null) + { + Gizmos.matrix = _ui.displayObject.cachedTransform.localToWorldMatrix; + pos = new Vector3(_ui.width / 2, -_ui.height / 2, 0); + size = new Vector3(_ui.width, _ui.height, 0); + } + else + { + Gizmos.matrix = this.container.cachedTransform.localToWorldMatrix; + pos = new Vector3(uiBounds.x + uiBounds.width / 2, -uiBounds.y - uiBounds.height / 2, 0); + size = new Vector3(uiBounds.width, uiBounds.height, 0); + } + + Gizmos.color = new Color(0, 0, 0, 0); + Gizmos.DrawCube(pos, size); + + Gizmos.color = Color.white; + Gizmos.DrawWireCube(pos, size); + } + + public int EM_sortingOrder + { + get { return sortingOrder; } + } + + public void EM_BeforeUpdate() + { + if (container == null) + CreateContainer(); + + if (packageName != null && componentName != null && _ui == null) + CreateUI_EditMode(); + + if (screenSizeVer != StageCamera.screenSizeVer) + HandleScreenSizeChanged(); + } + + public void EM_Update(UpdateContext context) + { + DisplayObject.hideFlags = HideFlags.DontSaveInEditor; + + container.Update(context); + + if (setNativeChildrenOrder) + { + CacheNativeChildrenRenderers(); + + int cnt = _renders.Count; + int sv = context.renderingOrder++; + for (int i = 0; i < cnt; i++) + { + Renderer r = _renders[i]; + if (r != null) + r.sortingOrder = sv; + } + } + } + + public void EM_Reload() + { + if (_ui != null) + { + _ui.Dispose(); + _ui = null; + } + } + + #endregion + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs.meta new file mode 100644 index 0000000..69e2778 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/UIPanel.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 024553ecf96a65649b929ee08c9214fd +timeCreated: 1460480287 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs b/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs new file mode 100644 index 0000000..8a4b6e6 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs @@ -0,0 +1,555 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI +{ + /// + /// Window class. + /// 窗口使用前首先要设置窗口中需要显示的内容,这通常是在编辑器里制作好的,可以直接使用Window.contentPane进行设置。 + /// 建议把设置contentPane等初始化操作放置到Window.onInit方法中。 + /// 另外,FairyGUI还提供了一套机制用于窗口动态创建。动态创建是指初始时仅指定窗口需要使用的资源,等窗口需要显示时才实际开始构建窗口的内容。 + /// 首先需要在窗口的构造函数中调用Window.addUISource。这个方法需要一个IUISource类型的参数,而IUISource是一个接口, + /// 用户需要自行实现载入相关UI包的逻辑。当窗口第一次显示之前,IUISource的加载方法将会被调用,并等待载入完成后才返回执行Window.OnInit,然后窗口才会显示。 + /// + /// 如果你需要窗口显示时播放动画效果,那么覆盖doShowAnimation编写你的动画代码,并且在动画结束后调用onShown。覆盖onShown编写其他需要在窗口显示时处理的业务逻辑。 + /// 如果你需要窗口隐藏时播放动画效果,那么覆盖doHideAnimation编写你的动画代码,并且在动画结束时调用Window.hideImmediately(注意不是直接调用onHide!)。覆盖onHide编写其他需要在窗口隐藏时处理的业务逻辑。 + /// + public class Window : GComponent + { + /// + /// + /// + public bool bringToFontOnClick; + + GComponent _frame; + GComponent _contentPane; + GObject _modalWaitPane; + GObject _closeButton; + GObject _dragArea; + GObject _contentArea; + bool _modal; + + List _uiSources; + bool _inited; + bool _loading; + + protected int _requestingCmd; + +#if FAIRYGUI_PUERTS + public Action __onInit; + public Action __onShown; + public Action __onHide; + public Action __doShowAnimation; + public Action __doHideAnimation; +#endif + + public Window() + : base() + { + _uiSources = new List(); + this.tabStopChildren = true; + bringToFontOnClick = UIConfig.bringWindowToFrontOnClick; + + displayObject.onAddedToStage.Add(__addedToStage); + displayObject.onRemovedFromStage.Add(__removeFromStage); + displayObject.onTouchBegin.AddCapture(__touchBegin); + + this.gameObjectName = "Window"; + SetHome(GRoot.inst); + } + + /// + /// Set a UISource to this window. It must call before the window is shown. When the window is first time to show, + /// UISource.Load is called. Only after all UISource is loaded, the window will continue to init. + /// 为窗口添加一个源。这个方法建议在构造函数调用。当窗口第一次显示前,UISource的Load方法将被调用,然后只有所有的UISource + /// 都ready后,窗口才会继续初始化和显示。 + /// + /// + public void AddUISource(IUISource source) + { + _uiSources.Add(source); + } + + /// + /// + /// + public GComponent contentPane + { + set + { + if (_contentPane != value) + { + if (_contentPane != null) + RemoveChild(_contentPane); + _contentPane = value; + if (_contentPane != null) + { + this.gameObjectName = "Window - " + _contentPane.gameObjectName; + _contentPane.gameObjectName = "ContentPane"; + + AddChild(_contentPane); + this.SetSize(_contentPane.width, _contentPane.height); + _contentPane.AddRelation(this, RelationType.Size); + _contentPane.fairyBatching = true; + _frame = _contentPane.GetChild("frame") as GComponent; + if (_frame != null) + { + this.closeButton = _frame.GetChild("closeButton"); + this.dragArea = _frame.GetChild("dragArea"); + this.contentArea = _frame.GetChild("contentArea"); + } + } + else + { + _frame = null; + this.gameObjectName = "Window"; + } + } + } + get + { + return _contentPane; + } + } + + /// + /// + /// + public GComponent frame + { + get { return _frame; } + } + + /// + /// + /// + public GObject closeButton + { + get { return _closeButton; } + set + { + if (_closeButton != null) + _closeButton.onClick.Remove(closeEventHandler); + _closeButton = value; + if (_closeButton != null) + _closeButton.onClick.Add(closeEventHandler); + } + } + + /// + /// + /// + public GObject dragArea + { + get { return _dragArea; } + set + { + if (_dragArea != value) + { + if (_dragArea != null) + { + _dragArea.draggable = false; + _dragArea.onDragStart.Remove(__dragStart); + } + + _dragArea = value; + if (_dragArea != null) + { + GGraph graph = _dragArea as GGraph; + if (graph != null && graph.shape.isEmpty) + graph.DrawRect(_dragArea.width, _dragArea.height, 0, Color.clear, Color.clear); + _dragArea.draggable = true; + _dragArea.onDragStart.Add(__dragStart); + } + } + } + } + + /// + /// + /// + public GObject contentArea + { + get { return _contentArea; } + set { _contentArea = value; } + } + + /// + /// + /// + public GObject modalWaitingPane + { + get { return _modalWaitPane; } + } + + /// + /// + /// + public void Show() + { + GRoot.inst.ShowWindow(this); + } + + /// + /// + /// + /// + public void ShowOn(GRoot r) + { + r.ShowWindow(this); + } + + /// + /// + /// + public void Hide() + { + if (this.isShowing) + DoHideAnimation(); + } + + /// + /// Hide window immediately, no OnHide will be called. + /// + public void HideImmediately() + { + this.root.HideWindowImmediately(this); + } + + /// + /// Make the window be center of the screen. + /// + /// + /// Add relations to ensure keeping center on screen size changed. + public void CenterOn(GRoot r, bool restraint) + { + this.SetXY((int)((r.width - this.width) / 2), (int)((r.height - this.height) / 2)); + if (restraint) + { + this.AddRelation(r, RelationType.Center_Center); + this.AddRelation(r, RelationType.Middle_Middle); + } + } + + /// + /// Switch show and hide status. + /// + public void ToggleStatus() + { + if (isTop) + Hide(); + else + Show(); + } + + /// + /// + /// + public bool isShowing + { + get { return parent != null; } + } + + /// + /// + /// + public bool isTop + { + get { return parent != null && parent.GetChildIndex(this) == parent.numChildren - 1; } + } + + /// + /// + /// + public bool modal + { + get { return _modal; } + set { _modal = value; } + } + + /// + /// + /// + public void BringToFront() + { + this.root.BringToFront(this); + } + + /// + /// + /// + public void ShowModalWait() + { + ShowModalWait(0); + } + + /// + /// Display a modal waiting sign in the front. + /// 显示一个等待标志在最前面。等待标志的资源可以通过UIConfig.windowModalWaiting。等待标志组件会设置为屏幕大小,请内部做好关联。 + /// 还可以设定一个requestingCmd作为等待的命令字,在CloseModalWait里传入相同的命令字ModalWait将结束,否则CloseModalWait无效。 + /// + /// + public void ShowModalWait(int requestingCmd) + { + if (requestingCmd != 0) + _requestingCmd = requestingCmd; + + if (UIConfig.windowModalWaiting != null) + { + if (_modalWaitPane == null) + { + _modalWaitPane = UIPackage.CreateObjectFromURL(UIConfig.windowModalWaiting); + _modalWaitPane.SetHome(this); + } + + LayoutModalWaitPane(); + + AddChild(_modalWaitPane); + } + } + + virtual protected void LayoutModalWaitPane() + { + if (_contentArea != null) + { + Vector2 pt = _frame.LocalToGlobal(Vector2.zero); + pt = this.GlobalToLocal(pt); + _modalWaitPane.SetXY((int)pt.x + _contentArea.x, (int)pt.y + _contentArea.y); + _modalWaitPane.SetSize(_contentArea.width, _contentArea.height); + } + else + _modalWaitPane.SetSize(this.width, this.height); + } + + /// + /// + /// + /// + public bool CloseModalWait() + { + return CloseModalWait(0); + } + + /// + /// Close modal waiting. If rquestingCmd is equal to the value you transfer in ShowModalWait, mowal wait will be closed. + /// Otherwise, this function has no effect. + /// 关闭模式等待。如果requestingCmd和ShowModalWait传入的不相同,则这个函数没有任何动作,立即返回。 + /// + /// + /// + public bool CloseModalWait(int requestingCmd) + { + if (requestingCmd != 0) + { + if (_requestingCmd != requestingCmd) + return false; + } + _requestingCmd = 0; + + if (_modalWaitPane != null && _modalWaitPane.parent != null) + RemoveChild(_modalWaitPane); + + return true; + } + + /// + /// + /// + public bool modalWaiting + { + get { return (_modalWaitPane != null) && _modalWaitPane.inContainer; } + } + + /// + /// + /// + public void Init() + { + if (_inited || _loading) + return; + + if (_uiSources.Count > 0) + { + _loading = false; + int cnt = _uiSources.Count; + for (int i = 0; i < cnt; i++) + { + IUISource lib = _uiSources[i]; + if (!lib.loaded) + { + lib.Load(__uiLoadComplete); + _loading = true; + } + } + + if (!_loading) + _init(); + } + else + _init(); + } + + /// + /// + /// + virtual protected void OnInit() + { +#if FAIRYGUI_TOLUA + CallLua("OnInit"); +#endif +#if FAIRYGUI_PUERTS + if (__onInit != null) + __onInit(); +#endif + } + + /// + /// + /// + virtual protected void OnShown() + { +#if FAIRYGUI_TOLUA + CallLua("OnShown"); +#endif +#if FAIRYGUI_PUERTS + if (__onShown != null) + __onShown(); +#endif + } + + /// + /// + /// + virtual protected void OnHide() + { +#if FAIRYGUI_TOLUA + CallLua("OnHide"); +#endif +#if FAIRYGUI_PUERTS + if (__onHide != null) + __onHide(); +#endif + } + + /// + /// + /// + virtual protected void DoShowAnimation() + { +#if FAIRYGUI_TOLUA + if (!CallLua("DoShowAnimation")) + OnShown(); +#elif FAIRYGUI_PUERTS + if (__doShowAnimation != null) + __doShowAnimation(); + else + OnShown(); +#else + OnShown(); +#endif + } + + /// + /// + /// + virtual protected void DoHideAnimation() + { +#if FAIRYGUI_TOLUA + if (!CallLua("DoHideAnimation")) + HideImmediately(); +#elif FAIRYGUI_PUERTS + if (__doHideAnimation != null) + __doHideAnimation(); + else + HideImmediately(); +#else + HideImmediately(); +#endif + } + + void __uiLoadComplete() + { + int cnt = _uiSources.Count; + for (int i = 0; i < cnt; i++) + { + IUISource lib = _uiSources[i]; + if (!lib.loaded) + return; + } + + _loading = false; + _init(); + } + + void _init() + { + _inited = true; + OnInit(); + + if (this.isShowing) + DoShowAnimation(); + } + + override public void Dispose() + { + if (_modalWaitPane != null && _modalWaitPane.parent == null) + _modalWaitPane.Dispose(); + + + //正在加载资源的异步过程中发生意外关闭 应该取消正在加载的load + if (_loading) + { + for (int i = 0; i < _uiSources.Count; ++i) + { + _uiSources[i].Cancel(); + } + } + + +#if FAIRYGUI_PUERTS + __onInit = null; + __onShown = null; + __onHide = null; + __doShowAnimation = null; + __doHideAnimation = null; +#endif + + base.Dispose(); + } + + virtual protected void closeEventHandler(EventContext context) + { + Hide(); + } + + void __addedToStage() + { + if (!_inited) + Init(); + else + DoShowAnimation(); + } + + void __removeFromStage() + { + CloseModalWait(); + OnHide(); + } + + private void __touchBegin(EventContext context) + { + if (this.isShowing && bringToFontOnClick) + { + BringToFront(); + } + } + + private void __dragStart(EventContext context) + { + context.PreventDefault(); + + this.StartDrag((int)context.data); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs.meta b/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs.meta new file mode 100644 index 0000000..edaec09 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/UI/Window.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c454632cb96595b4cbeeee678a5d9f0b +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils.meta b/Assets/Plugins/FairyGUI/Scripts/Utils.meta new file mode 100644 index 0000000..5cfdaaa --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d78e1a4b8ac1336498bfbbe945d16276 +folderAsset: yes +timeCreated: 1460480287 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs new file mode 100644 index 0000000..878be22 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs @@ -0,0 +1,455 @@ +using System; +using System.Text; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class ByteBuffer + { + /// + /// + /// + public bool littleEndian; + + /// + /// + /// + public string[] stringTable; + + /// + /// + /// + public int version; + + int _pointer; + int _offset; + int _length; + byte[] _data; + + static byte[] temp = new byte[8]; + + /// + /// + /// + /// + /// + /// + public ByteBuffer(byte[] data, int offset = 0, int length = -1) + { + _data = data; + _pointer = 0; + _offset = offset; + if (length < 0) + _length = data.Length - offset; + else + _length = length; + littleEndian = false; + } + + /// + /// + /// + public int position + { + get { return _pointer; } + set { _pointer = value; } + } + + /// + /// + /// + public int length + { + get { return _length; } + } + + /// + /// + /// + public bool bytesAvailable + { + get { return _pointer < _length; } + } + + /// + /// + /// + public byte[] buffer + { + get { return _data; } + set + { + _data = value; + _pointer = 0; + _offset = 0; + _length = _data.Length; + } + } + + /// + /// + /// + /// + /// + public int Skip(int count) + { + _pointer += count; + return _pointer; + } + + /// + /// + /// + /// + public byte ReadByte() + { + return _data[_offset + _pointer++]; + } + + /// + /// + /// + /// + /// + /// + /// + public byte[] ReadBytes(byte[] output, int destIndex, int count) + { + if (count > _length - _pointer) + throw new ArgumentOutOfRangeException(); + + Array.Copy(_data, _offset + _pointer, output, destIndex, count); + _pointer += count; + return output; + } + + /// + /// + /// + /// + /// + public byte[] ReadBytes(int count) + { + if (count > _length - _pointer) + throw new ArgumentOutOfRangeException(); + + byte[] result = new byte[count]; + Array.Copy(_data, _offset + _pointer, result, 0, count); + _pointer += count; + return result; + } + + /// + /// + /// + /// + public ByteBuffer ReadBuffer() + { + int count = ReadInt(); + ByteBuffer ba = new ByteBuffer(_data, _pointer, count); + ba.stringTable = stringTable; + ba.version = version; + _pointer += count; + return ba; + } + + /// + /// + /// + /// + public char ReadChar() + { + return (char)ReadShort(); + } + + /// + /// + /// + /// + public bool ReadBool() + { + bool result = _data[_offset + _pointer] == 1; + _pointer++; + return result; + } + + /// + /// + /// + /// + public short ReadShort() + { + int startIndex = _offset + _pointer; + _pointer += 2; + if (littleEndian) + return (short)(_data[startIndex] | (_data[startIndex + 1] << 8)); + else + return (short)((_data[startIndex] << 8) | _data[startIndex + 1]); + } + + /// + /// + /// + /// + public ushort ReadUshort() + { + return (ushort)ReadShort(); + } + + /// + /// + /// + /// + public int ReadInt() + { + int startIndex = _offset + _pointer; + _pointer += 4; + if (littleEndian) + return (_data[startIndex]) | (_data[startIndex + 1] << 8) | (_data[startIndex + 2] << 16) | (_data[startIndex + 3] << 24); + else + return (_data[startIndex] << 24) | (_data[startIndex + 1] << 16) | (_data[startIndex + 2] << 8) | (_data[startIndex + 3]); + } + + /// + /// + /// + /// + public uint ReadUint() + { + return (uint)ReadInt(); + } + + /// + /// + /// + /// + public float ReadFloat() + { + int startIndex = _offset + _pointer; + _pointer += 4; + if (littleEndian == BitConverter.IsLittleEndian) + return BitConverter.ToSingle(_data, startIndex); + else + { + temp[3] = _data[startIndex]; + temp[2] = _data[startIndex + 1]; + temp[1] = _data[startIndex + 2]; + temp[0] = _data[startIndex + 3]; + return BitConverter.ToSingle(temp, 0); + } + } + + /// + /// + /// + /// + public long ReadLong() + { + int startIndex = _offset + _pointer; + _pointer += 8; + if (littleEndian) + { + int i1 = (_data[startIndex]) | (_data[startIndex + 1] << 8) | (_data[startIndex + 2] << 16) | (_data[startIndex + 3] << 24); + int i2 = (_data[startIndex + 4]) | (_data[startIndex + 5] << 8) | (_data[startIndex + 6] << 16) | (_data[startIndex + 7] << 24); + return (uint)i1 | ((long)i2 << 32); + } + else + { + int i1 = (_data[startIndex] << 24) | (_data[startIndex + 1] << 16) | (_data[startIndex + 2] << 8) | (_data[startIndex + 3]); + int i2 = (_data[startIndex + 4] << 24) | (_data[startIndex + 5] << 16) | (_data[startIndex + 6] << 8) | (_data[startIndex + 7]); + return (uint)i2 | ((long)i1 << 32); + } + } + + /// + /// + /// + /// + public double ReadDouble() + { + int startIndex = _offset + _pointer; + _pointer += 8; + if (littleEndian == BitConverter.IsLittleEndian) + return BitConverter.ToDouble(_data, startIndex); + else + { + temp[7] = _data[startIndex]; + temp[6] = _data[startIndex + 1]; + temp[5] = _data[startIndex + 2]; + temp[4] = _data[startIndex + 3]; + temp[3] = _data[startIndex + 4]; + temp[2] = _data[startIndex + 5]; + temp[1] = _data[startIndex + 6]; + temp[0] = _data[startIndex + 7]; + return BitConverter.ToSingle(temp, 0); + } + } + + /// + /// + /// + /// + public string ReadString() + { + ushort len = ReadUshort(); + string result = Encoding.UTF8.GetString(_data, _offset + _pointer, len); + _pointer += len; + return result; + } + + /// + /// + /// + /// + /// + public string ReadString(int len) + { + string result = Encoding.UTF8.GetString(_data, _offset + _pointer, len); + _pointer += len; + return result; + } + + /// + /// + /// + /// + public string ReadS() + { + int index = ReadUshort(); + if (index == 65534) //null + return null; + else if (index == 65533) + return string.Empty; + else + return stringTable[index]; + } + + /// + /// + /// + /// + /// + public string[] ReadSArray(int cnt) + { + string[] ret = new string[cnt]; + for (int i = 0; i < cnt; i++) + ret[i] = ReadS(); + + return ret; + } + + private static List helperPoints = new List(); + + /// + /// + /// + /// + public List ReadPath() + { + helperPoints.Clear(); + + int len = ReadInt(); + if (len == 0) + return helperPoints; + + for (int i = 0; i < len; i++) + { + GPathPoint.CurveType curveType = (GPathPoint.CurveType)ReadByte(); + switch (curveType) + { + case GPathPoint.CurveType.Bezier: + helperPoints.Add(new GPathPoint(new Vector3(ReadFloat(), ReadFloat(), 0), + new Vector3(ReadFloat(), ReadFloat(), 0))); + break; + + case GPathPoint.CurveType.CubicBezier: + helperPoints.Add(new GPathPoint(new Vector3(ReadFloat(), ReadFloat(), 0), + new Vector3(ReadFloat(), ReadFloat(), 0), + new Vector3(ReadFloat(), ReadFloat(), 0))); + break; + + default: + helperPoints.Add(new GPathPoint(new Vector3(ReadFloat(), ReadFloat(), 0), curveType)); + break; + } + } + + return helperPoints; + } + + /// + /// + /// + /// + public void WriteS(string value) + { + int index = ReadUshort(); + if (index != 65534 && index != 65533) + stringTable[index] = value; + } + + /// + /// + /// + /// + public Color ReadColor() + { + int startIndex = _offset + _pointer; + byte r = _data[startIndex]; + byte g = _data[startIndex + 1]; + byte b = _data[startIndex + 2]; + byte a = _data[startIndex + 3]; + _pointer += 4; + + return new Color32(r, g, b, a); + } + + /// + /// + /// + /// + /// + /// + public bool Seek(int indexTablePos, int blockIndex) + { + int tmp = _pointer; + _pointer = indexTablePos; + int segCount = _data[_offset + _pointer++]; + if (blockIndex < segCount) + { + bool useShort = _data[_offset + _pointer++] == 1; + int newPos; + if (useShort) + { + _pointer += 2 * blockIndex; + newPos = ReadShort(); + } + else + { + _pointer += 4 * blockIndex; + newPos = ReadInt(); + } + + if (newPos > 0) + { + _pointer = indexTablePos + newPos; + return true; + } + else + { + _pointer = tmp; + return false; + } + } + else + { + _pointer = tmp; + return false; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs.meta new file mode 100644 index 0000000..66dbc09 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/ByteBuffer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f72828fa75e491f4d95f92a46b01956a +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html.meta new file mode 100644 index 0000000..b1f96a7 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: da6063debdf749748bac0a0029b709e5 +folderAsset: yes +timeCreated: 1461773298 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs new file mode 100644 index 0000000..ad0c90c --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class HtmlButton : IHtmlObject + { + public GComponent button { get; private set; } + + public const string CLICK_EVENT = "OnHtmlButtonClick"; + + public static string resource; + + RichTextField _owner; + HtmlElement _element; + EventCallback1 _clickHandler; + + public HtmlButton() + { + button = UIPackage.CreateObjectFromURL(resource).asCom; + _clickHandler = (EventContext context) => + { + _owner.DispatchEvent(CLICK_EVENT, context.data, this); + }; + } + + public DisplayObject displayObject + { + get { return button != null ? button.displayObject : null; } + } + + public HtmlElement element + { + get { return _element; } + } + + public float width + { + get { return button != null ? button.width : 0; } + } + + public float height + { + get { return button != null ? button.height : 0; } + } + + public void Create(RichTextField owner, HtmlElement element) + { + _owner = owner; + _element = element; + + if (button == null) + return; + + button.onClick.Add(_clickHandler); + int width = element.GetInt("width", button.sourceWidth); + int height = element.GetInt("height", button.sourceHeight); + button.SetSize(width, height); + button.text = element.GetString("value"); + } + + public void SetPosition(float x, float y) + { + if (button != null) + button.SetXY(x, y); + } + + public void Add() + { + if (button != null) + _owner.AddChild(button.displayObject); + } + + public void Remove() + { + if (button != null && button.displayObject.parent != null) + _owner.RemoveChild(button.displayObject); + } + + public void Release() + { + if (button != null) + button.RemoveEventListeners(); + + _owner = null; + _element = null; + } + + public void Dispose() + { + if (button != null) + button.Dispose(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs.meta new file mode 100644 index 0000000..d46ad3a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlButton.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 268c2d7ad77b66449b4e0e39a6d0ca15 +timeCreated: 1461773298 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs new file mode 100644 index 0000000..cd1d8ed --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs @@ -0,0 +1,215 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public enum HtmlElementType + { + Text, + Link, + Image, + Input, + Select, + Object, + + //internal + LinkEnd, + } + + /// + /// + /// + public class HtmlElement + { + public HtmlElementType type; + public string name; + public string text; + public TextFormat format; + public int charIndex; + + public IHtmlObject htmlObject; + public int status; //1 hidden 2 clipped 4 added + public int space; + public Vector2 position; + + Hashtable attributes; + + public HtmlElement() + { + format = new TextFormat(); + } + + public object Get(string attrName) + { + if (attributes == null) + return null; + + return attributes[attrName]; + } + + public void Set(string attrName, object attrValue) + { + if (attributes == null) + attributes = new Hashtable(); + + attributes[attrName] = attrValue; + } + + public string GetString(string attrName) + { + return GetString(attrName, null); + } + + public string GetString(string attrName, string defValue) + { + if (attributes == null) + return defValue; + + object ret = attributes[attrName]; + if (ret != null) + return ret.ToString(); + else + return defValue; + } + + public int GetInt(string attrName) + { + return GetInt(attrName, 0); + } + + public int GetInt(string attrName, int defValue) + { + string value = GetString(attrName); + if (value == null || value.Length == 0) + return defValue; + + if (value[value.Length - 1] == '%') + { + int ret; + if (int.TryParse(value.Substring(0, value.Length - 1), out ret)) + return Mathf.CeilToInt(ret / 100.0f * defValue); + else + return defValue; + } + else + { + int ret; + if (int.TryParse(value, out ret)) + return ret; + else + return defValue; + } + } + + public float GetFloat(string attrName) + { + return GetFloat(attrName, 0); + } + + public float GetFloat(string attrName, float defValue) + { + string value = GetString(attrName); + if (value == null || value.Length == 0) + return defValue; + + float ret; + if (float.TryParse(value, out ret)) + return ret; + else + return defValue; + } + + public bool GetBool(string attrName) + { + return GetBool(attrName, false); + } + + public bool GetBool(string attrName, bool defValue) + { + string value = GetString(attrName); + if (value == null || value.Length == 0) + return defValue; + + bool ret; + if (bool.TryParse(value, out ret)) + return ret; + else + return defValue; + } + + public Color GetColor(string attrName, Color defValue) + { + string value = GetString(attrName); + if (value == null || value.Length == 0) + return defValue; + + return ToolSet.ConvertFromHtmlColor(value); + } + + public void FetchAttributes() + { + attributes = XMLIterator.GetAttributes(attributes); + } + + + public bool isEntity + { + get { return type == HtmlElementType.Image || type == HtmlElementType.Select || type == HtmlElementType.Input || type == HtmlElementType.Object; } + } + + #region Pool Support + + static Stack elementPool = new Stack(); + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + elementPool.Clear(); + } +#endif + + public static HtmlElement GetElement(HtmlElementType type) + { + HtmlElement ret; + if (elementPool.Count > 0) + ret = elementPool.Pop(); + else + ret = new HtmlElement(); + ret.type = type; + + if (type != HtmlElementType.Text && ret.attributes == null) + ret.attributes = new Hashtable(); + + return ret; + } + + public static void ReturnElement(HtmlElement element) + { + element.name = null; + element.text = null; + element.htmlObject = null; + element.status = 0; + if (element.attributes != null) + element.attributes.Clear(); + elementPool.Push(element); + } + + public static void ReturnElements(List elements) + { + int count = elements.Count; + for (int i = 0; i < count; i++) + { + HtmlElement element = elements[i]; + ReturnElement(element); + } + elements.Clear(); + } + + #endregion + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs.meta new file mode 100644 index 0000000..5a0bc4e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlElement.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7d92c6025bf750145af0e456a7fd3f33 +timeCreated: 1461773298 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs new file mode 100644 index 0000000..1882480 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class HtmlImage : IHtmlObject + { + public GLoader loader { get; private set; } + + RichTextField _owner; + HtmlElement _element; + bool _externalTexture; + + public HtmlImage() + { + loader = (GLoader)UIObjectFactory.NewObject(ObjectType.Loader); + loader.gameObjectName = "HtmlImage"; + loader.fill = FillType.ScaleFree; + loader.touchable = false; + } + + public DisplayObject displayObject + { + get { return loader.displayObject; } + } + + public HtmlElement element + { + get { return _element; } + } + + public float width + { + get { return loader.width; } + } + + public float height + { + get { return loader.height; } + } + + public void Create(RichTextField owner, HtmlElement element) + { + _owner = owner; + _element = element; + + int sourceWidth = 0; + int sourceHeight = 0; + NTexture texture = owner.htmlPageContext.GetImageTexture(this); + if (texture != null) + { + sourceWidth = texture.width; + sourceHeight = texture.height; + + loader.texture = texture; + _externalTexture = true; + } + else + { + string src = element.GetString("src"); + if (src != null) + { + PackageItem pi = UIPackage.GetItemByURL(src); + if (pi != null) + { + sourceWidth = pi.width; + sourceHeight = pi.height; + } + } + + loader.url = src; + _externalTexture = false; + } + + int width = element.GetInt("width", sourceWidth); + int height = element.GetInt("height", sourceHeight); + + if (width == 0) + width = 5; + if (height == 0) + height = 10; + loader.SetSize(width, height); + } + + public void SetPosition(float x, float y) + { + loader.SetXY(x, y); + } + + public void Add() + { + _owner.AddChild(loader.displayObject); + } + + public void Remove() + { + if (loader.displayObject.parent != null) + _owner.RemoveChild(loader.displayObject); + } + + public void Release() + { + loader.RemoveEventListeners(); + if (_externalTexture) + { + _owner.htmlPageContext.FreeImageTexture(this, loader.texture); + _externalTexture = false; + } + + loader.url = null; + _owner = null; + _element = null; + } + + public void Dispose() + { + if (_externalTexture) + _owner.htmlPageContext.FreeImageTexture(this, loader.texture); + loader.Dispose(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs.meta new file mode 100644 index 0000000..d8b725d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlImage.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 81871e13cb458ab4da28358d5634e082 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs new file mode 100644 index 0000000..dcd6b78 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs @@ -0,0 +1,117 @@ +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class HtmlInput : IHtmlObject + { + public GTextInput textInput { get; private set; } + + RichTextField _owner; + HtmlElement _element; + bool _hidden; + + public static int defaultBorderSize = 2; + public static Color defaultBorderColor = ToolSet.ColorFromRGB(0xA9A9A9); + public static Color defaultBackgroundColor = Color.clear; + + public HtmlInput() + { + textInput = (GTextInput)UIObjectFactory.NewObject(ObjectType.InputText); + textInput.gameObjectName = "HtmlInput"; + textInput.verticalAlign = VertAlignType.Middle; + } + + public DisplayObject displayObject + { + get { return textInput.displayObject; } + } + + public HtmlElement element + { + get { return _element; } + } + + public float width + { + get { return _hidden ? 0 : textInput.width; } + } + + public float height + { + get { return _hidden ? 0 : textInput.height; } + } + + public void Create(RichTextField owner, HtmlElement element) + { + _owner = owner; + _element = element; + + string type = element.GetString("type"); + if (type != null) + type = type.ToLower(); + + _hidden = type == "hidden"; + if (!_hidden) + { + int width = element.GetInt("width", 0); + int height = element.GetInt("height", 0); + int borderSize = element.GetInt("border", defaultBorderSize); + Color borderColor = element.GetColor("border-color", defaultBorderColor); + Color backgroundColor = element.GetColor("background-color", defaultBackgroundColor); + + if (width == 0) + { + width = element.space; + if (width > _owner.width / 2 || width < 100) + width = (int)_owner.width / 2; + } + if (height == 0) + height = element.format.size + 10; + + textInput.textFormat = element.format; + textInput.displayAsPassword = type == "password"; + textInput.maxLength = element.GetInt("maxlength", int.MaxValue); + textInput.border = borderSize; + textInput.borderColor = borderColor; + textInput.backgroundColor = backgroundColor; + textInput.SetSize(width, height); + } + textInput.text = element.GetString("value"); + } + + public void SetPosition(float x, float y) + { + if (!_hidden) + textInput.SetXY(x, y); + } + + public void Add() + { + if (!_hidden) + _owner.AddChild(textInput.displayObject); + } + + public void Remove() + { + if (!_hidden && textInput.displayObject.parent != null) + _owner.RemoveChild(textInput.displayObject); + } + + public void Release() + { + textInput.RemoveEventListeners(); + textInput.text = null; + + _owner = null; + _element = null; + } + + public void Dispose() + { + textInput.Dispose(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs.meta new file mode 100644 index 0000000..ac74a30 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlInput.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: e1c8ffa51408aef45839b1d00198b819 +timeCreated: 1535374215 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs new file mode 100644 index 0000000..6875fab --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs @@ -0,0 +1,113 @@ + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class HtmlLink : IHtmlObject + { + RichTextField _owner; + HtmlElement _element; + SelectionShape _shape; + + EventCallback1 _clickHandler; + EventCallback1 _rolloverHandler; + EventCallback0 _rolloutHandler; + + public HtmlLink() + { + _shape = new SelectionShape(); + _shape.gameObject.name = "HtmlLink"; + _shape.cursor = "text-link"; + + _clickHandler = (EventContext context) => + { + _owner.BubbleEvent("onClickLink", _element.GetString("href")); + }; + _rolloverHandler = (EventContext context) => + { + if (_owner.htmlParseOptions.linkHoverBgColor.a > 0) + _shape.color = _owner.htmlParseOptions.linkHoverBgColor; + }; + _rolloutHandler = () => + { + if (_owner.htmlParseOptions.linkHoverBgColor.a > 0) + _shape.color = _owner.htmlParseOptions.linkBgColor; + }; + } + + public DisplayObject displayObject + { + get { return _shape; } + } + + public HtmlElement element + { + get { return _element; } + } + + public float width + { + get { return 0; } + } + + public float height + { + get { return 0; } + } + + public void Create(RichTextField owner, HtmlElement element) + { + _owner = owner; + _element = element; + _shape.onClick.Add(_clickHandler); + _shape.onRollOver.Add(_rolloverHandler); + _shape.onRollOut.Add(_rolloutHandler); + _shape.color = _owner.htmlParseOptions.linkBgColor; + } + + public void SetArea(int startLine, float startCharX, int endLine, float endCharX) + { + if (startLine == endLine && startCharX > endCharX) + { + float tmp = startCharX; + startCharX = endCharX; + endCharX = tmp; + } + _shape.rects.Clear(); + _owner.textField.GetLinesShape(startLine, startCharX, endLine, endCharX, true, _shape.rects); + _shape.Refresh(); + } + + public void SetPosition(float x, float y) + { + _shape.SetXY(x, y); + } + + public void Add() + { + //add below _shape + _owner.AddChildAt(_shape, 0); + } + + public void Remove() + { + if (_shape.parent != null) + _owner.RemoveChild(_shape); + } + + public void Release() + { + _shape.RemoveEventListeners(); + + _owner = null; + _element = null; + } + + public void Dispose() + { + _shape.Dispose(); + _shape = null; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs.meta new file mode 100644 index 0000000..5378e14 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlLink.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b2132a66ecae9cc4c99c6fbe37051723 +timeCreated: 1470116309 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs new file mode 100644 index 0000000..b21840e --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs @@ -0,0 +1,179 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class HtmlPageContext : IHtmlPageContext + { + Stack _imagePool; + Stack _inputPool; + Stack _buttonPool; + Stack _selectPool; + Stack _linkPool; + + static HtmlPageContext _inst; + + public static HtmlPageContext inst + { + get + { + if (_inst == null) + _inst = new HtmlPageContext(); + return _inst; + } + } + + static Transform _poolManager; + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + _inst = null; + _poolManager = null; + } +#endif + + public HtmlPageContext() + { + _imagePool = new Stack(); + _inputPool = new Stack(); + _buttonPool = new Stack(); + _selectPool = new Stack(); + _linkPool = new Stack(); + + if (Application.isPlaying && _poolManager == null) + _poolManager = Stage.inst.CreatePoolManager("HtmlObjectPool"); + } + + virtual public IHtmlObject CreateObject(RichTextField owner, HtmlElement element) + { + IHtmlObject ret = null; + bool fromPool = false; + if (element.type == HtmlElementType.Image) + { + if (_imagePool.Count > 0 && _poolManager != null) + { + ret = _imagePool.Pop(); + fromPool = true; + } + else + ret = new HtmlImage(); + } + else if (element.type == HtmlElementType.Link) + { + if (_linkPool.Count > 0 && _poolManager != null) + { + ret = _linkPool.Pop(); + fromPool = true; + } + else + ret = new HtmlLink(); + } + else if (element.type == HtmlElementType.Input) + { + string type = element.GetString("type"); + if (type != null) + type = type.ToLower(); + if (type == "button" || type == "submit") + { + if (_buttonPool.Count > 0 && _poolManager != null) + { + ret = _buttonPool.Pop(); + fromPool = true; + } + else + { + if (HtmlButton.resource != null) + ret = new HtmlButton(); + else + Debug.LogWarning("FairyGUI: Set HtmlButton.resource first"); + } + } + else + { + if (_inputPool.Count > 0 && _poolManager != null) + { + ret = _inputPool.Pop(); + fromPool = true; + } + else + ret = new HtmlInput(); + } + } + else if (element.type == HtmlElementType.Select) + { + if (_selectPool.Count > 0 && _poolManager != null) + { + ret = _selectPool.Pop(); + fromPool = true; + } + else + { + if (HtmlSelect.resource != null) + ret = new HtmlSelect(); + else + Debug.LogWarning("FairyGUI: Set HtmlSelect.resource first"); + } + } + + //Debug.Log("from=" + fromPool); + if (ret != null) + { + //可能已经被GameObject tree deleted了,不再使用 + if (fromPool && ret.displayObject != null && ret.displayObject.isDisposed) + { + ret.Dispose(); + return CreateObject(owner, element); + + } + ret.Create(owner, element); + if (ret.displayObject != null) + ret.displayObject.home = owner.cachedTransform; + } + + return ret; + } + + virtual public void FreeObject(IHtmlObject obj) + { + if (_poolManager == null) + { + obj.Dispose(); + return; + } + + //可能已经被GameObject tree deleted了,不再回收 + if (obj.displayObject != null && obj.displayObject.isDisposed) + { + obj.Dispose(); + return; + } + + obj.Release(); + if (obj is HtmlImage) + _imagePool.Push(obj); + else if (obj is HtmlInput) + _inputPool.Push(obj); + else if (obj is HtmlButton) + _buttonPool.Push(obj); + else if (obj is HtmlLink) + _linkPool.Push(obj); + + if (obj.displayObject != null) + obj.displayObject.cachedTransform.SetParent(_poolManager, false); + } + + virtual public NTexture GetImageTexture(HtmlImage image) + { + return null; + } + + virtual public void FreeImageTexture(HtmlImage image, NTexture texture) + { + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs.meta new file mode 100644 index 0000000..0b75b19 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlPageContext.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5454bca8f43f9094ea66614837a2c0be +timeCreated: 1461773298 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs new file mode 100644 index 0000000..3c378a3 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class HtmlParseOptions + { + /// + /// + /// + public bool linkUnderline; + + /// + /// + /// + public Color linkColor; + + /// + /// + /// + public Color linkBgColor; + + /// + /// + /// + public Color linkHoverBgColor; + + /// + /// + /// + public bool ignoreWhiteSpace; + + /// + /// + /// + public static bool DefaultLinkUnderline = true; + + /// + /// + /// + public static Color DefaultLinkColor = new Color32(0x3A, 0x67, 0xCC, 0xFF); + + /// + /// + /// + public static Color DefaultLinkBgColor = Color.clear; + + /// + /// + /// + public static Color DefaultLinkHoverBgColor = Color.clear; + + public HtmlParseOptions() + { + linkUnderline = DefaultLinkUnderline; + linkColor = DefaultLinkColor; + linkBgColor = DefaultLinkBgColor; + linkHoverBgColor = DefaultLinkHoverBgColor; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs.meta new file mode 100644 index 0000000..f81921d --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParseOptions.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8e3e6e98345b46a43a4181a0790d4f30 +timeCreated: 1470231110 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs new file mode 100644 index 0000000..cdd3ec1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs @@ -0,0 +1,395 @@ +using System; +using System.Collections.Generic; +using System.Text; +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class HtmlParser + { + public static HtmlParser inst = new HtmlParser(); + + protected class TextFormat2 : TextFormat + { + public bool colorChanged; + } + + protected List _textFormatStack; + protected int _textFormatStackTop; + protected TextFormat2 _format; + protected List _elements; + protected HtmlParseOptions _defaultOptions; + + static List sHelperList1 = new List(); + static List sHelperList2 = new List(); + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + inst = new HtmlParser(); + } +#endif + + public HtmlParser() + { + _textFormatStack = new List(); + _format = new TextFormat2(); + _defaultOptions = new HtmlParseOptions(); + } + + virtual public void Parse(string aSource, TextFormat defaultFormat, List elements, HtmlParseOptions parseOptions) + { + if (parseOptions == null) + parseOptions = _defaultOptions; + + _elements = elements; + _textFormatStackTop = 0; + _format.CopyFrom(defaultFormat); + _format.colorChanged = false; + int skipText = 0; + bool ignoreWhiteSpace = parseOptions.ignoreWhiteSpace; + bool skipNextCR = false; + string text; + + XMLIterator.Begin(aSource, true); + while (XMLIterator.NextTag()) + { + if (skipText == 0) + { + text = XMLIterator.GetText(ignoreWhiteSpace); + if (text.Length > 0) + { + if (skipNextCR && text[0] == '\n') + text = text.Substring(1); + AppendText(text); + } + } + + skipNextCR = false; + switch (XMLIterator.tagName) + { + case "b": + if (XMLIterator.tagType == XMLTagType.Start) + { + PushTextFormat(); + _format.bold = true; + } + else + PopTextFormat(); + break; + + case "i": + if (XMLIterator.tagType == XMLTagType.Start) + { + PushTextFormat(); + _format.italic = true; + } + else + PopTextFormat(); + break; + + case "u": + if (XMLIterator.tagType == XMLTagType.Start) + { + PushTextFormat(); + _format.underline = true; + } + else + PopTextFormat(); + break; + + case "strike": + if (XMLIterator.tagType == XMLTagType.Start) + { + PushTextFormat(); + _format.strikethrough = true; + } + else + PopTextFormat(); + break; + + case "sub": + { + if (XMLIterator.tagType == XMLTagType.Start) + { + PushTextFormat(); + _format.specialStyle = TextFormat.SpecialStyle.Subscript; + } + else + PopTextFormat(); + } + break; + + case "sup": + { + if (XMLIterator.tagType == XMLTagType.Start) + { + PushTextFormat(); + _format.specialStyle = TextFormat.SpecialStyle.Superscript; + } + else + PopTextFormat(); + } + break; + + case "font": + if (XMLIterator.tagType == XMLTagType.Start) + { + PushTextFormat(); + + _format.size = XMLIterator.GetAttributeInt("size", _format.size); + string color = XMLIterator.GetAttribute("color"); + if (color != null) + { + string[] parts = color.Split(','); + if (parts.Length == 1) + { + _format.color = ToolSet.ConvertFromHtmlColor(color); + _format.gradientColor = null; + _format.colorChanged = true; + } + else + { + if (_format.gradientColor == null) + _format.gradientColor = new Color32[4]; + _format.gradientColor[0] = ToolSet.ConvertFromHtmlColor(parts[0]); + _format.gradientColor[1] = ToolSet.ConvertFromHtmlColor(parts[1]); + if (parts.Length > 2) + { + _format.gradientColor[2] = ToolSet.ConvertFromHtmlColor(parts[2]); + if (parts.Length > 3) + _format.gradientColor[3] = ToolSet.ConvertFromHtmlColor(parts[3]); + else + _format.gradientColor[3] = _format.gradientColor[2]; + } + else + { + _format.gradientColor[2] = _format.gradientColor[0]; + _format.gradientColor[3] = _format.gradientColor[1]; + } + } + } + } + else if (XMLIterator.tagType == XMLTagType.End) + PopTextFormat(); + break; + + case "br": + AppendText("\n"); + break; + + case "img": + if (XMLIterator.tagType == XMLTagType.Start || XMLIterator.tagType == XMLTagType.Void) + { + HtmlElement element = HtmlElement.GetElement(HtmlElementType.Image); + element.FetchAttributes(); + element.name = element.GetString("name"); + element.format.align = _format.align; + _elements.Add(element); + } + break; + + case "a": + if (XMLIterator.tagType == XMLTagType.Start) + { + PushTextFormat(); + + _format.underline = _format.underline || parseOptions.linkUnderline; + if (!_format.colorChanged && parseOptions.linkColor.a != 0) + _format.color = parseOptions.linkColor; + + HtmlElement element = HtmlElement.GetElement(HtmlElementType.Link); + element.FetchAttributes(); + element.name = element.GetString("name"); + element.format.align = _format.align; + _elements.Add(element); + } + else if (XMLIterator.tagType == XMLTagType.End) + { + PopTextFormat(); + + HtmlElement element = HtmlElement.GetElement(HtmlElementType.LinkEnd); + _elements.Add(element); + } + break; + + case "input": + { + HtmlElement element = HtmlElement.GetElement(HtmlElementType.Input); + element.FetchAttributes(); + element.name = element.GetString("name"); + element.format.CopyFrom(_format); + _elements.Add(element); + } + break; + + case "select": + { + if (XMLIterator.tagType == XMLTagType.Start || XMLIterator.tagType == XMLTagType.Void) + { + HtmlElement element = HtmlElement.GetElement(HtmlElementType.Select); + element.FetchAttributes(); + if (XMLIterator.tagType == XMLTagType.Start) + { + sHelperList1.Clear(); + sHelperList2.Clear(); + while (XMLIterator.NextTag()) + { + if (XMLIterator.tagName == "select") + break; + + if (XMLIterator.tagName == "option") + { + if (XMLIterator.tagType == XMLTagType.Start || XMLIterator.tagType == XMLTagType.Void) + sHelperList2.Add(XMLIterator.GetAttribute("value", string.Empty)); + else + sHelperList1.Add(XMLIterator.GetText()); + } + } + element.Set("items", sHelperList1.ToArray()); + element.Set("values", sHelperList2.ToArray()); + } + element.name = element.GetString("name"); + element.format.CopyFrom(_format); + _elements.Add(element); + } + } + break; + + case "p": + if (XMLIterator.tagType == XMLTagType.Start) + { + PushTextFormat(); + string align = XMLIterator.GetAttribute("align"); + switch (align) + { + case "center": + _format.align = AlignType.Center; + break; + case "right": + _format.align = AlignType.Right; + break; + } + if (!IsNewLine()) + AppendText("\n"); + } + else if (XMLIterator.tagType == XMLTagType.End) + { + AppendText("\n"); + skipNextCR = true; + + PopTextFormat(); + } + break; + + case "ui": + case "div": + case "li": + if (XMLIterator.tagType == XMLTagType.Start) + { + if (!IsNewLine()) + AppendText("\n"); + } + else + { + AppendText("\n"); + skipNextCR = true; + } + break; + + case "html": + case "body": + //full html + ignoreWhiteSpace = true; + break; + + case "head": + case "style": + case "script": + case "form": + if (XMLIterator.tagType == XMLTagType.Start) + skipText++; + else if (XMLIterator.tagType == XMLTagType.End) + skipText--; + break; + } + } + + if (skipText == 0) + { + text = XMLIterator.GetText(ignoreWhiteSpace); + if (text.Length > 0) + { + if (skipNextCR && text[0] == '\n') + text = text.Substring(1); + AppendText(text); + } + } + + _elements = null; + } + + protected void PushTextFormat() + { + TextFormat2 tf; + if (_textFormatStack.Count <= _textFormatStackTop) + { + tf = new TextFormat2(); + _textFormatStack.Add(tf); + } + else + tf = _textFormatStack[_textFormatStackTop]; + tf.CopyFrom(_format); + tf.colorChanged = _format.colorChanged; + _textFormatStackTop++; + } + + protected void PopTextFormat() + { + if (_textFormatStackTop > 0) + { + TextFormat2 tf = _textFormatStack[_textFormatStackTop - 1]; + _format.CopyFrom(tf); + _format.colorChanged = tf.colorChanged; + _textFormatStackTop--; + } + } + + protected bool IsNewLine() + { + if (_elements.Count > 0) + { + HtmlElement element = _elements[_elements.Count - 1]; + if (element != null && element.type == HtmlElementType.Text) + return element.text.EndsWith("\n"); + else + return false; + } + + return true; + } + + protected void AppendText(string text) + { + HtmlElement element; + if (_elements.Count > 0) + { + element = _elements[_elements.Count - 1]; + if (element.type == HtmlElementType.Text && element.format.EqualStyle(_format)) + { + element.text += text; + return; + } + } + + element = HtmlElement.GetElement(HtmlElementType.Text); + element.text = text; + element.format.CopyFrom(_format); + _elements.Add(element); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs.meta new file mode 100644 index 0000000..023f296 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlParser.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7ddf5eb218ff0cf438894e2ceb54f494 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs new file mode 100644 index 0000000..ae55ba2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class HtmlSelect : IHtmlObject + { + public GComboBox comboBox { get; private set; } + + public const string CHANGED_EVENT = "OnHtmlSelectChanged"; + + public static string resource; + + RichTextField _owner; + HtmlElement _element; + EventCallback0 _changeHandler; + + public HtmlSelect() + { + comboBox = UIPackage.CreateObjectFromURL(resource).asComboBox; + _changeHandler = () => + { + _owner.DispatchEvent(CHANGED_EVENT, null, this); + }; + } + + public DisplayObject displayObject + { + get { return comboBox.displayObject; } + } + + public HtmlElement element + { + get { return _element; } + } + + public float width + { + get { return comboBox != null ? comboBox.width : 0; } + } + + public float height + { + get { return comboBox != null ? comboBox.height : 0; } + } + + public void Create(RichTextField owner, HtmlElement element) + { + _owner = owner; + _element = element; + + if (comboBox == null) + return; + + comboBox.onChanged.Add(_changeHandler); + + int width = element.GetInt("width", comboBox.sourceWidth); + int height = element.GetInt("height", comboBox.sourceHeight); + comboBox.SetSize(width, height); + comboBox.items = (string[])element.Get("items"); + comboBox.values = (string[])element.Get("values"); + comboBox.value = element.GetString("value"); + } + + public void SetPosition(float x, float y) + { + if (comboBox != null) + comboBox.SetXY(x, y); + } + + public void Add() + { + if (comboBox != null) + _owner.AddChild(comboBox.displayObject); + } + + public void Remove() + { + if (comboBox != null && comboBox.displayObject.parent != null) + _owner.RemoveChild(comboBox.displayObject); + } + + public void Release() + { + if (comboBox != null) + comboBox.RemoveEventListeners(); + + _owner = null; + _element = null; + } + + public void Dispose() + { + if (comboBox != null) + comboBox.Dispose(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs.meta new file mode 100644 index 0000000..9be7ae0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/HtmlSelect.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a9047de8f5e36634b9cb9d7270dfb1e8 +timeCreated: 1461773298 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs new file mode 100644 index 0000000..cfe2d9a --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// Create->SetPosition->(Add<->Remove)->Release->Dispose + /// + public interface IHtmlObject + { + float width { get; } + float height { get; } + DisplayObject displayObject { get; } + HtmlElement element { get; } + + void Create(RichTextField owner, HtmlElement element); + void SetPosition(float x, float y); + void Add(); + void Remove(); + void Release(); + void Dispose(); + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs.meta new file mode 100644 index 0000000..c256bf1 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlObject.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d5a416822d3ee0a4d80e32f6a03ba56f +timeCreated: 1461773298 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs new file mode 100644 index 0000000..8073e75 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs @@ -0,0 +1,15 @@ + +namespace FairyGUI.Utils +{ + /// + /// + /// + public interface IHtmlPageContext + { + IHtmlObject CreateObject(RichTextField owner, HtmlElement element); + void FreeObject(IHtmlObject obj); + + NTexture GetImageTexture(HtmlImage image); + void FreeImageTexture(HtmlImage image, NTexture texture); + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs.meta new file mode 100644 index 0000000..97be559 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Html/IHtmlPageContext.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0f24771f8977b674aa4fbf86f45e2105 +timeCreated: 1461773298 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs new file mode 100644 index 0000000..36ec266 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs @@ -0,0 +1,282 @@ +using System.Collections.Generic; +using System.Collections; +using UnityEngine; + +namespace FairyGUI +{ + public delegate void TimerCallback(object param); + + /// + /// + /// + public class Timers + { + public static int repeat; + public static float time; + + public static bool catchCallbackExceptions = false; + + Dictionary _items; + Dictionary _toAdd; + List _toRemove; + List _pool; + + TimersEngine _engine; + GameObject gameObject; + + private static Timers _inst; + public static Timers inst + { + get + { + if (_inst == null) + _inst = new Timers(); + return _inst; + } + } + +#if UNITY_2019_3_OR_NEWER + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeOnLoad() + { + _inst = null; + } +#endif + + public Timers() + { + _inst = this; + gameObject = new GameObject("[FairyGUI.Timers]"); + gameObject.hideFlags = HideFlags.HideInHierarchy; + gameObject.SetActive(true); + Object.DontDestroyOnLoad(gameObject); + + _engine = gameObject.AddComponent(); + + _items = new Dictionary(); + _toAdd = new Dictionary(); + _toRemove = new List(); + _pool = new List(100); + } + + public void Add(float interval, int repeat, TimerCallback callback) + { + Add(interval, repeat, callback, null); + } + + /** + * @interval in seconds + * @repeat 0 indicate loop infinitely, otherwise the run count + **/ + public void Add(float interval, int repeat, TimerCallback callback, object callbackParam) + { + if (callback == null) + { + Debug.LogWarning("timer callback is null, " + interval + "," + repeat); + return; + } + + Anymous_T t; + if (_items.TryGetValue(callback, out t)) + { + t.set(interval, repeat, callback, callbackParam); + t.elapsed = 0; + t.deleted = false; + return; + } + + if (_toAdd.TryGetValue(callback, out t)) + { + t.set(interval, repeat, callback, callbackParam); + return; + } + + t = GetFromPool(); + t.interval = interval; + t.repeat = repeat; + t.callback = callback; + t.param = callbackParam; + _toAdd[callback] = t; + } + + public void CallLater(TimerCallback callback) + { + Add(0.001f, 1, callback); + } + + public void CallLater(TimerCallback callback, object callbackParam) + { + Add(0.001f, 1, callback, callbackParam); + } + + public void AddUpdate(TimerCallback callback) + { + Add(0.001f, 0, callback); + } + + public void AddUpdate(TimerCallback callback, object callbackParam) + { + Add(0.001f, 0, callback, callbackParam); + } + + public void StartCoroutine(IEnumerator routine) + { + _engine.StartCoroutine(routine); + } + + public bool Exists(TimerCallback callback) + { + if (_toAdd.ContainsKey(callback)) + return true; + + Anymous_T at; + if (_items.TryGetValue(callback, out at)) + return !at.deleted; + + return false; + } + + public void Remove(TimerCallback callback) + { + Anymous_T t; + if (_toAdd.TryGetValue(callback, out t)) + { + _toAdd.Remove(callback); + ReturnToPool(t); + } + + if (_items.TryGetValue(callback, out t)) + t.deleted = true; + } + + private Anymous_T GetFromPool() + { + Anymous_T t; + int cnt = _pool.Count; + if (cnt > 0) + { + t = _pool[cnt - 1]; + _pool.RemoveAt(cnt - 1); + t.deleted = false; + t.elapsed = 0; + } + else + t = new Anymous_T(); + return t; + } + + private void ReturnToPool(Anymous_T t) + { + t.callback = null; + _pool.Add(t); + } + + public void Update() + { + float dt = Time.unscaledDeltaTime; + Dictionary.Enumerator iter; + + if (_items.Count > 0) + { + iter = _items.GetEnumerator(); + while (iter.MoveNext()) + { + Anymous_T i = iter.Current.Value; + if (i.deleted) + { + _toRemove.Add(i); + continue; + } + + i.elapsed += dt; + if (i.elapsed < i.interval) + continue; + + i.elapsed -= i.interval; + if (i.elapsed < 0 || i.elapsed > 0.03f) + i.elapsed = 0; + + if (i.repeat > 0) + { + i.repeat--; + if (i.repeat == 0) + { + i.deleted = true; + _toRemove.Add(i); + } + } + repeat = i.repeat; + if (i.callback != null) + { + if (catchCallbackExceptions) + { + try + { + i.callback(i.param); + } + catch (System.Exception e) + { + i.deleted = true; + Debug.LogWarning("FairyGUI: timer(internal=" + i.interval + ", repeat=" + i.repeat + ") callback error > " + e.Message); + } + } + else + i.callback(i.param); + } + } + iter.Dispose(); + } + + int len = _toRemove.Count; + if (len > 0) + { + for (int k = 0; k < len; k++) + { + Anymous_T i = _toRemove[k]; + if (i.deleted && i.callback != null) + { + _items.Remove(i.callback); + ReturnToPool(i); + } + } + _toRemove.Clear(); + } + + if (_toAdd.Count > 0) + { + iter = _toAdd.GetEnumerator(); + while (iter.MoveNext()) + _items.Add(iter.Current.Key, iter.Current.Value); + iter.Dispose(); + _toAdd.Clear(); + } + } + } + + class Anymous_T + { + public float interval; + public int repeat; + public TimerCallback callback; + public object param; + + public float elapsed; + public bool deleted; + + public void set(float interval, int repeat, TimerCallback callback, object param) + { + this.interval = interval; + this.repeat = repeat; + this.callback = callback; + this.param = param; + } + } + + class TimersEngine : MonoBehaviour + { + void Update() + { + Timers.inst.Update(); + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs.meta new file mode 100644 index 0000000..ccb4ee0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/Timers.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ae007a032c404234b875df43f3129117 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs new file mode 100644 index 0000000..ca06b66 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs @@ -0,0 +1,136 @@ +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public static class ToolSet + { + public static Color ConvertFromHtmlColor(string str) + { + if (str.Length < 7 || str[0] != '#') + return Color.black; + + if (str.Length == 9) + { + //optimize:avoid using Convert.ToByte and Substring + //return new Color32(Convert.ToByte(str.Substring(3, 2), 16), Convert.ToByte(str.Substring(5, 2), 16), + // Convert.ToByte(str.Substring(7, 2), 16), Convert.ToByte(str.Substring(1, 2), 16)); + + return new Color32((byte)(CharToHex(str[3]) * 16 + CharToHex(str[4])), + (byte)(CharToHex(str[5]) * 16 + CharToHex(str[6])), + (byte)(CharToHex(str[7]) * 16 + CharToHex(str[8])), + (byte)(CharToHex(str[1]) * 16 + CharToHex(str[2]))); + } + else + { + //return new Color32(Convert.ToByte(str.Substring(1, 2), 16), Convert.ToByte(str.Substring(3, 2), 16), + //Convert.ToByte(str.Substring(5, 2), 16), 255); + + return new Color32((byte)(CharToHex(str[1]) * 16 + CharToHex(str[2])), + (byte)(CharToHex(str[3]) * 16 + CharToHex(str[4])), + (byte)(CharToHex(str[5]) * 16 + CharToHex(str[6])), + 255); + } + } + + public static Color ColorFromRGB(int value) + { + return new Color(((value >> 16) & 0xFF) / 255f, ((value >> 8) & 0xFF) / 255f, (value & 0xFF) / 255f, 1); + } + + public static Color ColorFromRGBA(uint value) + { + return new Color(((value >> 16) & 0xFF) / 255f, ((value >> 8) & 0xFF) / 255f, (value & 0xFF) / 255f, ((value >> 24) & 0xFF) / 255f); + } + + public static int CharToHex(char c) + { + if (c >= '0' && c <= '9') + return (int)c - 48; + if (c >= 'A' && c <= 'F') + return 10 + (int)c - 65; + else if (c >= 'a' && c <= 'f') + return 10 + (int)c - 97; + else + return 0; + } + + public static Rect Intersection(ref Rect rect1, ref Rect rect2) + { + if (rect1.width == 0 || rect1.height == 0 || rect2.width == 0 || rect2.height == 0) + return new Rect(0, 0, 0, 0); + + float left = rect1.xMin > rect2.xMin ? rect1.xMin : rect2.xMin; + float right = rect1.xMax < rect2.xMax ? rect1.xMax : rect2.xMax; + float top = rect1.yMin > rect2.yMin ? rect1.yMin : rect2.yMin; + float bottom = rect1.yMax < rect2.yMax ? rect1.yMax : rect2.yMax; + + if (left > right || top > bottom) + return new Rect(0, 0, 0, 0); + else + return Rect.MinMaxRect(left, top, right, bottom); + } + + public static Rect Union(ref Rect rect1, ref Rect rect2) + { + if (rect2.width == 0 || rect2.height == 0) + return rect1; + + if (rect1.width == 0 || rect1.height == 0) + return rect2; + + float x = Mathf.Min(rect1.x, rect2.x); + float y = Mathf.Min(rect1.y, rect2.y); + return new Rect(x, y, Mathf.Max(rect1.xMax, rect2.xMax) - x, Mathf.Max(rect1.yMax, rect2.yMax) - y); + } + + public static void SkewMatrix(ref Matrix4x4 matrix, float skewX, float skewY) + { + skewX = -skewX * Mathf.Deg2Rad; + skewY = -skewY * Mathf.Deg2Rad; + float sinX = Mathf.Sin(skewX); + float cosX = Mathf.Cos(skewX); + float sinY = Mathf.Sin(skewY); + float cosY = Mathf.Cos(skewY); + + float m00 = matrix.m00 * cosY - matrix.m10 * sinX; + float m10 = matrix.m00 * sinY + matrix.m10 * cosX; + float m01 = matrix.m01 * cosY - matrix.m11 * sinX; + float m11 = matrix.m01 * sinY + matrix.m11 * cosX; + float m02 = matrix.m02 * cosY - matrix.m12 * sinX; + float m12 = matrix.m02 * sinY + matrix.m12 * cosX; + + matrix.m00 = m00; + matrix.m10 = m10; + matrix.m01 = m01; + matrix.m11 = m11; + matrix.m02 = m02; + matrix.m12 = m12; + } + + public static void RotateUV(Vector2[] uv, ref Rect baseUVRect) + { + int vertCount = uv.Length; + float xMin = Mathf.Min(baseUVRect.xMin, baseUVRect.xMax); + float yMin = baseUVRect.yMin; + float yMax = baseUVRect.yMax; + if (yMin > yMax) + { + yMin = yMax; + yMax = baseUVRect.yMin; + } + + float tmp; + for (int i = 0; i < vertCount; i++) + { + Vector2 m = uv[i]; + tmp = m.y; + m.y = yMin + m.x - xMin; + m.x = xMin + yMax - tmp; + uv[i] = m; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs.meta new file mode 100644 index 0000000..d6bfa39 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/ToolSet.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 54357cad16a6ccb4ea698f76bb43527c +timeCreated: 1460480287 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs new file mode 100644 index 0000000..dcbbff2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs @@ -0,0 +1,226 @@ +using System.Collections.Generic; +using System.Text; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class UBBParser + { + public static UBBParser inst = new UBBParser(); + + string _text; + int _readPos; + + public TagHandler defaultTagHandler; + public Dictionary handlers; + + public int defaultImgWidth = 0; + public int defaultImgHeight = 0; + + public delegate string TagHandler(string tagName, bool end, string attr); + + public UBBParser() + { + handlers = new Dictionary(); + handlers["url"] = onTag_URL; + handlers["img"] = onTag_IMG; + handlers["b"] = onTag_Simple; + handlers["i"] = onTag_Simple; + handlers["u"] = onTag_Simple; + handlers["sup"] = onTag_Simple; + handlers["sub"] = onTag_Simple; + handlers["color"] = onTag_COLOR; + handlers["font"] = onTag_FONT; + handlers["size"] = onTag_SIZE; + handlers["align"] = onTag_ALIGN; + handlers["strike"] = onTag_Simple; + } + + protected string onTag_URL(string tagName, bool end, string attr) + { + if (!end) + { + if (attr != null) + return ""; + else + { + string href = GetTagText(false); + return ""; + } + } + else + return ""; + } + + protected string onTag_IMG(string tagName, bool end, string attr) + { + if (!end) + { + string src = GetTagText(true); + if (src == null || src.Length == 0) + return null; + + if (defaultImgWidth != 0) + return ""; + else + return ""; + } + else + return null; + } + + protected string onTag_Simple(string tagName, bool end, string attr) + { + return end ? ("") : ("<" + tagName + ">"); + } + + protected string onTag_COLOR(string tagName, bool end, string attr) + { + if (!end) + return ""; + else + return ""; + } + + protected string onTag_FONT(string tagName, bool end, string attr) + { + if (!end) + return ""; + else + return ""; + } + + protected string onTag_SIZE(string tagName, bool end, string attr) + { + if (!end) + return ""; + else + return ""; + } + + protected string onTag_ALIGN(string tagName, bool end, string attr) + { + if (!end) + return "

"; + else + return "

"; + } + + public string GetTagText(bool remove) + { + int pos1 = _readPos; + int pos2; + StringBuilder buffer = null; + while ((pos2 = _text.IndexOf('[', pos1)) != -1) + { + if (buffer == null) + buffer = new StringBuilder(); + + if (_text[pos2 - 1] == '\\') + { + buffer.Append(_text, pos1, pos2 - pos1 - 1); + buffer.Append('['); + pos1 = pos2 + 1; + } + else + { + buffer.Append(_text, pos1, pos2 - pos1); + break; + } + } + if (pos2 == -1) + return null; + + if (remove) + _readPos = pos2; + + return buffer.ToString(); + } + + public string Parse(string text) + { + _text = text; + int pos1 = 0, pos2, pos3; + bool end; + string tag, attr; + string repl; + StringBuilder buffer = null; + TagHandler func; + while ((pos2 = _text.IndexOf('[', pos1)) != -1) + { + if (buffer == null) + buffer = new StringBuilder(); + + if (pos2 > 0 && _text[pos2 - 1] == '\\') + { + buffer.Append(_text, pos1, pos2 - pos1 - 1); + buffer.Append('['); + pos1 = pos2 + 1; + continue; + } + + buffer.Append(_text, pos1, pos2 - pos1); + pos1 = pos2; + pos2 = _text.IndexOf(']', pos1); + if (pos2 == -1) + break; + + if (pos2 == pos1 + 1) + { + buffer.Append(_text, pos1, 2); + pos1 = pos2 + 1; + continue; + } + + end = _text[pos1 + 1] == '/'; + pos3 = end ? pos1 + 2 : pos1 + 1; + tag = _text.Substring(pos3, pos2 - pos3); + _readPos = pos2 + 1; + attr = null; + repl = null; + pos3 = tag.IndexOf('='); + if (pos3 != -1) + { + attr = tag.Substring(pos3 + 1); + tag = tag.Substring(0, pos3); + } + tag = tag.ToLower(); + if (handlers.TryGetValue(tag, out func)) + { + repl = func(tag, end, attr); + if (repl != null) + buffer.Append(repl); + } + else if (defaultTagHandler != null) + { + repl = defaultTagHandler(tag, end, attr); + if (repl != null) + buffer.Append(repl); + else + buffer.Append(_text, pos1, pos2 - pos1 + 1); + } + else + { + buffer.Append(_text, pos1, pos2 - pos1 + 1); + } + pos1 = _readPos; + } + + if (buffer == null) + { + _text = null; + return text; + } + else + { + if (pos1 < _text.Length) + buffer.Append(_text, pos1, _text.Length - pos1); + + _text = null; + return buffer.ToString(); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs.meta new file mode 100644 index 0000000..86987c0 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/UBBParser.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 916709794f601f949962dffdb251b946 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs new file mode 100644 index 0000000..28a0473 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs @@ -0,0 +1,427 @@ +using System; +using System.Collections.Generic; +using System.Text; +using UnityEngine; + +namespace FairyGUI.Utils +{ + /// + /// A simplest and readonly XML class + /// + public class XML + { + public string name; + public string text; + + Dictionary _attributes; + XMLList _children; + + public static XML Create(string tag) + { + XML xml = new XML(); + xml.name = tag; + return xml; + } + + public XML(string XmlString) + { + Parse(XmlString); + } + + private XML() + { + } + + public Dictionary attributes + { + get + { + if (_attributes == null) + _attributes = new Dictionary(); + return _attributes; + } + } + + public bool HasAttribute(string attrName) + { + if (_attributes == null) + return false; + + return _attributes.ContainsKey(attrName); + } + + public string GetAttribute(string attrName) + { + return GetAttribute(attrName, null); + } + + public string GetAttribute(string attrName, string defValue) + { + if (_attributes == null) + return defValue; + + string ret; + if (_attributes.TryGetValue(attrName, out ret)) + return ret; + else + return defValue; + } + + public int GetAttributeInt(string attrName) + { + return GetAttributeInt(attrName, 0); + } + + public int GetAttributeInt(string attrName, int defValue) + { + string value = GetAttribute(attrName); + if (value == null || value.Length == 0) + return defValue; + + int ret; + if (int.TryParse(value, out ret)) + return ret; + else + return defValue; + } + + public float GetAttributeFloat(string attrName) + { + return GetAttributeFloat(attrName, 0); + } + + public float GetAttributeFloat(string attrName, float defValue) + { + string value = GetAttribute(attrName); + if (value == null || value.Length == 0) + return defValue; + + float ret; + if (float.TryParse(value, out ret)) + return ret; + else + return defValue; + } + + public bool GetAttributeBool(string attrName) + { + return GetAttributeBool(attrName, false); + } + + public bool GetAttributeBool(string attrName, bool defValue) + { + string value = GetAttribute(attrName); + if (value == null || value.Length == 0) + return defValue; + + bool ret; + if (bool.TryParse(value, out ret)) + return ret; + else + return defValue; + } + + public string[] GetAttributeArray(string attrName) + { + string value = GetAttribute(attrName); + if (value != null) + { + if (value.Length == 0) + return new string[] { }; + else + return value.Split(','); + } + else + return null; + } + + public string[] GetAttributeArray(string attrName, char seperator) + { + string value = GetAttribute(attrName); + if (value != null) + { + if (value.Length == 0) + return new string[] { }; + else + return value.Split(seperator); + } + else + return null; + } + + public Color GetAttributeColor(string attrName, Color defValue) + { + string value = GetAttribute(attrName); + if (value == null || value.Length == 0) + return defValue; + + return ToolSet.ConvertFromHtmlColor(value); + } + + public Vector2 GetAttributeVector(string attrName) + { + string value = GetAttribute(attrName); + if (value != null) + { + string[] arr = value.Split(','); + return new Vector2(float.Parse(arr[0]), float.Parse(arr[1])); + } + else + return Vector2.zero; + } + + public void SetAttribute(string attrName, string attrValue) + { + if (_attributes == null) + _attributes = new Dictionary(); + + _attributes[attrName] = attrValue; + } + + public void SetAttribute(string attrName, bool attrValue) + { + if (_attributes == null) + _attributes = new Dictionary(); + + _attributes[attrName] = attrValue ? "true" : "false"; + } + + public void SetAttribute(string attrName, int attrValue) + { + if (_attributes == null) + _attributes = new Dictionary(); + + _attributes[attrName] = attrValue.ToString(); + } + + public void SetAttribute(string attrName, float attrValue) + { + if (_attributes == null) + _attributes = new Dictionary(); + + _attributes[attrName] = string.Format("{0:0.####}", attrValue); + } + + public void RemoveAttribute(string attrName) + { + if (_attributes != null) + _attributes.Remove(attrName); + } + + public XML GetNode(string selector) + { + if (_children == null) + return null; + else + return _children.Find(selector); + } + + public XMLList elements + { + get + { + if (_children == null) + _children = new XMLList(); + return _children; + } + } + + public XMLList Elements() + { + if (_children == null) + _children = new XMLList(); + return _children; + } + + public XMLList Elements(string selector) + { + if (_children == null) + _children = new XMLList(); + return _children.Filter(selector); + } + + public XMLList.Enumerator GetEnumerator() + { + if (_children == null) + return new XMLList.Enumerator(null, null); + else + return new XMLList.Enumerator(_children.rawList, null); + } + + public XMLList.Enumerator GetEnumerator(string selector) + { + if (_children == null) + return new XMLList.Enumerator(null, selector); + else + return new XMLList.Enumerator(_children.rawList, selector); + } + + public void AppendChild(XML child) + { + this.elements.Add(child); + } + + public void RemoveChild(XML child) + { + if (_children == null) + return; + + this._children.rawList.Remove(child); + } + + public void RemoveChildren(string selector) + { + if (_children == null) + return; + + if (string.IsNullOrEmpty(selector)) + _children.Clear(); + else + _children.RemoveAll(selector); + } + + static Stack sNodeStack = new Stack(); + public void Parse(string aSource) + { + Reset(); + + XML lastOpenNode = null; + sNodeStack.Clear(); + + XMLIterator.Begin(aSource); + while (XMLIterator.NextTag()) + { + if (XMLIterator.tagType == XMLTagType.Start || XMLIterator.tagType == XMLTagType.Void) + { + XML childNode; + if (lastOpenNode != null) + childNode = new XML(); + else + { + if (this.name != null) + { + Reset(); + throw new Exception("Invalid xml format - no root node."); + } + childNode = this; + } + + childNode.name = XMLIterator.tagName; + childNode._attributes = XMLIterator.GetAttributes(childNode._attributes); + + if (lastOpenNode != null) + { + if (XMLIterator.tagType != XMLTagType.Void) + sNodeStack.Push(lastOpenNode); + if (lastOpenNode._children == null) + lastOpenNode._children = new XMLList(); + lastOpenNode._children.Add(childNode); + } + if (XMLIterator.tagType != XMLTagType.Void) + lastOpenNode = childNode; + } + else if (XMLIterator.tagType == XMLTagType.End) + { + if (lastOpenNode == null || lastOpenNode.name != XMLIterator.tagName) + { + Reset(); + throw new Exception("Invalid xml format - <" + XMLIterator.tagName + "> dismatched."); + } + + if (lastOpenNode._children == null || lastOpenNode._children.Count == 0) + { + lastOpenNode.text = XMLIterator.GetText(); + } + + if (sNodeStack.Count > 0) + lastOpenNode = sNodeStack.Pop(); + else + lastOpenNode = null; + } + } + } + + public void Reset() + { + if (_attributes != null) + _attributes.Clear(); + if (_children != null) + _children.Clear(); + this.text = null; + } + + public string ToXMLString(bool includeHeader) + { + StringBuilder sb = new StringBuilder(); + if (includeHeader) + sb.Append("\n"); + ToXMLString(sb, 0); + return sb.ToString(); + } + + void ToXMLString(StringBuilder sb, int tabs) + { + if (tabs > 0) + sb.Append(' ', tabs * 2); + + if (name == "!") + { + sb.Append(""); + return; + } + + sb.Append('<').Append(name); + if (_attributes != null) + { + foreach (KeyValuePair kv in _attributes) + { + sb.Append(' '); + sb.Append(kv.Key).Append('=').Append('\"'); + int c = sb.Length; + sb.Append(kv.Value); + XMLUtils.EncodeString(sb, c, true); + sb.Append("\""); + } + } + + int numChildren = _children != null ? _children.Count : 0; + + if (string.IsNullOrEmpty(text) && numChildren == 0) + sb.Append("/>"); + else + { + sb.Append('>'); + + if (!string.IsNullOrEmpty(text)) + { + int c = sb.Length; + sb.Append(text); + XMLUtils.EncodeString(sb, c); + } + + if (numChildren > 0) + { + sb.Append('\n'); + int ctabs = tabs + 1; + for (int i = 0; i < numChildren; i++) + { + _children[i].ToXMLString(sb, ctabs); + sb.Append('\n'); + } + + if (tabs > 0) + sb.Append(' ', tabs * 2); + } + + sb.Append(""); + } + } + } +} \ No newline at end of file diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs.meta new file mode 100644 index 0000000..1aa64ce --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/XML.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8375f35e0c0dbc4429287ee8578f3cf1 +timeCreated: 1460480288 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs new file mode 100644 index 0000000..3415170 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs @@ -0,0 +1,485 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace FairyGUI.Utils +{ + public enum XMLTagType + { + Start, + End, + Void, + CDATA, + Comment, + Instruction + } + + /// + /// + /// + public class XMLIterator + { + public static string tagName; + public static XMLTagType tagType; + public static string lastTagName; + + static string source; + static int sourceLen; + static int parsePos; + static int tagPos; + static int tagLength; + static int lastTagEnd; + static bool attrParsed; + static bool lowerCaseName; + static StringBuilder buffer = new StringBuilder(); + static Dictionary attributes = new Dictionary(); + + const string CDATA_START = ""; + const string COMMENT_START = ""; + + public static void Begin(string source, bool lowerCaseName = false) + { + XMLIterator.source = source; + XMLIterator.lowerCaseName = lowerCaseName; + sourceLen = source.Length; + parsePos = 0; + lastTagEnd = 0; + tagPos = 0; + tagLength = 0; + tagName = null; + } + + public static bool NextTag() + { + int pos; + char c; + tagType = XMLTagType.Start; + buffer.Length = 0; + lastTagEnd = parsePos; + attrParsed = false; + lastTagName = tagName; + + while ((pos = source.IndexOf('<', parsePos)) != -1) + { + parsePos = pos; + pos++; + + if (pos == sourceLen) + break; + + c = source[pos]; + if (c == '!') + { + if (sourceLen > pos + 7 && source.Substring(pos - 1, 9) == CDATA_START) + { + pos = source.IndexOf(CDATA_END, pos); + tagType = XMLTagType.CDATA; + tagName = string.Empty; + tagPos = parsePos; + if (pos == -1) + tagLength = sourceLen - parsePos; + else + tagLength = pos + 3 - parsePos; + parsePos += tagLength; + return true; + } + else if (sourceLen > pos + 2 && source.Substring(pos - 1, 4) == COMMENT_START) + { + pos = source.IndexOf(COMMENT_END, pos); + tagType = XMLTagType.Comment; + tagName = string.Empty; + tagPos = parsePos; + if (pos == -1) + tagLength = sourceLen - parsePos; + else + tagLength = pos + 3 - parsePos; + parsePos += tagLength; + return true; + } + else + { + pos++; + tagType = XMLTagType.Instruction; + } + } + else if (c == '/') + { + pos++; + tagType = XMLTagType.End; + } + else if (c == '?') + { + pos++; + tagType = XMLTagType.Instruction; + } + + for (; pos < sourceLen; pos++) + { + c = source[pos]; + if (Char.IsWhiteSpace(c) || c == '>' || c == '/') + break; + } + if (pos == sourceLen) + break; + + buffer.Append(source, parsePos + 1, pos - parsePos - 1); + if (buffer.Length > 0 && buffer[0] == '/') + buffer.Remove(0, 1); + + bool singleQuoted = false, doubleQuoted = false; + int possibleEnd = -1; + for (; pos < sourceLen; pos++) + { + c = source[pos]; + if (c == '"') + { + if (!singleQuoted) + doubleQuoted = !doubleQuoted; + } + else if (c == '\'') + { + if (!doubleQuoted) + singleQuoted = !singleQuoted; + } + + if (c == '>') + { + if (!(singleQuoted || doubleQuoted)) + { + possibleEnd = -1; + break; + } + + possibleEnd = pos; + } + else if (c == '<') + break; + } + if (possibleEnd != -1) + pos = possibleEnd; + + if (pos == sourceLen) + break; + + if (source[pos - 1] == '/') + tagType = XMLTagType.Void; + + tagName = buffer.ToString(); + if (lowerCaseName) + tagName = tagName.ToLower(); + tagPos = parsePos; + tagLength = pos + 1 - parsePos; + parsePos += tagLength; + + return true; + } + + tagPos = sourceLen; + tagLength = 0; + tagName = null; + return false; + } + + public static string GetTagSource() + { + return source.Substring(tagPos, tagLength); + } + + public static string GetRawText(bool trim = false) + { + if (lastTagEnd == tagPos) + return string.Empty; + else if (trim) + { + int i = lastTagEnd; + for (; i < tagPos; i++) + { + char c = source[i]; + if (!char.IsWhiteSpace(c)) + break; + } + + if (i == tagPos) + return string.Empty; + else + return source.Substring(i, tagPos - i).TrimEnd(); + } + else + return source.Substring(lastTagEnd, tagPos - lastTagEnd); + } + + public static string GetText(bool trim = false) + { + if (lastTagEnd == tagPos) + return string.Empty; + else if (trim) + { + int i = lastTagEnd; + for (; i < tagPos; i++) + { + char c = source[i]; + if (!char.IsWhiteSpace(c)) + break; + } + + if (i == tagPos) + return string.Empty; + else + return XMLUtils.DecodeString(source.Substring(i, tagPos - i).TrimEnd()); + } + else + return XMLUtils.DecodeString(source.Substring(lastTagEnd, tagPos - lastTagEnd)); + } + + public static bool HasAttribute(string attrName) + { + if (!attrParsed) + { + attributes.Clear(); + ParseAttributes(attributes); + attrParsed = true; + } + + return attributes.ContainsKey(attrName); + } + + public static string GetAttribute(string attrName) + { + if (!attrParsed) + { + attributes.Clear(); + ParseAttributes(attributes); + attrParsed = true; + } + + string value; + if (attributes.TryGetValue(attrName, out value)) + return value; + else + return null; + } + + public static string GetAttribute(string attrName, string defValue) + { + string ret = GetAttribute(attrName); + if (ret != null) + return ret; + else + return defValue; + } + + public static int GetAttributeInt(string attrName) + { + return GetAttributeInt(attrName, 0); + } + + public static int GetAttributeInt(string attrName, int defValue) + { + string value = GetAttribute(attrName); + if (value == null || value.Length == 0) + return defValue; + + int ret; + if (int.TryParse(value, out ret)) + return ret; + else + return defValue; + } + + public static float GetAttributeFloat(string attrName) + { + return GetAttributeFloat(attrName, 0); + } + + public static float GetAttributeFloat(string attrName, float defValue) + { + string value = GetAttribute(attrName); + if (value == null || value.Length == 0) + return defValue; + + float ret; + if (float.TryParse(value, out ret)) + return ret; + else + return defValue; + } + + public static bool GetAttributeBool(string attrName) + { + return GetAttributeBool(attrName, false); + } + + public static bool GetAttributeBool(string attrName, bool defValue) + { + string value = GetAttribute(attrName); + if (value == null || value.Length == 0) + return defValue; + + bool ret; + if (bool.TryParse(value, out ret)) + return ret; + else + return defValue; + } + + public static Dictionary GetAttributes(Dictionary result) + { + if (result == null) + result = new Dictionary(); + + if (attrParsed) + { + foreach (KeyValuePair kv in attributes) + result[kv.Key] = kv.Value; + } + else //这里没有先ParseAttributes再赋值给result是为了节省复制的操作 + ParseAttributes(result); + + return result; + } + + public static Hashtable GetAttributes(Hashtable result) + { + if (result == null) + result = new Hashtable(); + + if (attrParsed) + { + foreach (KeyValuePair kv in attributes) + result[kv.Key] = kv.Value; + } + else //这里没有先ParseAttributes再赋值给result是为了节省复制的操作 + ParseAttributes(result); + + return result; + } + + static void ParseAttributes(IDictionary attrs) + { + string attrName; + int valueStart; + int valueEnd; + bool waitValue = false; + int quoted; + buffer.Length = 0; + int i = tagPos; + int attrEnd = tagPos + tagLength; + + if (i < attrEnd && source[i] == '<') + { + for (; i < attrEnd; i++) + { + char c = source[i]; + if (Char.IsWhiteSpace(c) || c == '>' || c == '/') + break; + } + } + + for (; i < attrEnd; i++) + { + char c = source[i]; + if (c == '=') + { + valueStart = -1; + valueEnd = -1; + quoted = 0; + for (int j = i + 1; j < attrEnd; j++) + { + char c2 = source[j]; + if (Char.IsWhiteSpace(c2)) + { + if (valueStart != -1 && quoted == 0) + { + valueEnd = j - 1; + break; + } + } + else if (c2 == '>') + { + if (quoted == 0) + { + valueEnd = j - 1; + break; + } + } + else if (c2 == '"') + { + if (valueStart != -1) + { + if (quoted != 1) + { + valueEnd = j - 1; + break; + } + } + else + { + quoted = 2; + valueStart = j + 1; + } + } + else if (c2 == '\'') + { + if (valueStart != -1) + { + if (quoted != 2) + { + valueEnd = j - 1; + break; + } + } + else + { + quoted = 1; + valueStart = j + 1; + } + } + else if (valueStart == -1) + { + valueStart = j; + } + } + + if (valueStart != -1 && valueEnd != -1) + { + attrName = buffer.ToString(); + if (lowerCaseName) + attrName = attrName.ToLower(); + buffer.Length = 0; + attrs[attrName] = XMLUtils.DecodeString(source.Substring(valueStart, valueEnd - valueStart + 1)); + i = valueEnd + 1; + } + else + break; + } + else if (!Char.IsWhiteSpace(c)) + { + if (waitValue || c == '/' || c == '>') + { + if (buffer.Length > 0) + { + attrName = buffer.ToString(); + if (lowerCaseName) + attrName = attrName.ToLower(); + attrs[attrName] = string.Empty; + buffer.Length = 0; + } + + waitValue = false; + } + + if (c != '/' && c != '>') + buffer.Append(c); + } + else + { + if (buffer.Length > 0) + waitValue = true; + } + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs.meta new file mode 100644 index 0000000..a67c170 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLIterator.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 35c75485c4f537341bbc16207588f75d +timeCreated: 1461773298 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs new file mode 100644 index 0000000..c4710ee --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class XMLList + { + public List rawList; + + public XMLList() + { + rawList = new List(); + } + + public XMLList(List list) + { + rawList = list; + } + + public void Add(XML xml) + { + rawList.Add(xml); + } + + public void Clear() + { + rawList.Clear(); + } + + public int Count + { + get { return rawList.Count; } + } + + public XML this[int index] + { + get { return rawList[index]; } + } + + public Enumerator GetEnumerator() + { + return new Enumerator(rawList, null); + } + + public Enumerator GetEnumerator(string selector) + { + return new Enumerator(rawList, selector); + } + + static List _tmpList = new List(); + public XMLList Filter(string selector) + { + bool allFit = true; + _tmpList.Clear(); + int cnt = rawList.Count; + for (int i = 0; i < cnt; i++) + { + XML xml = rawList[i]; + if (xml.name == selector) + _tmpList.Add(xml); + else + allFit = false; + } + + if (allFit) + return this; + else + { + XMLList ret = new XMLList(_tmpList); + _tmpList = new List(); + return ret; + } + } + + public XML Find(string selector) + { + int cnt = rawList.Count; + for (int i = 0; i < cnt; i++) + { + XML xml = rawList[i]; + if (xml.name == selector) + return xml; + } + return null; + } + + public void RemoveAll(string selector) + { + rawList.RemoveAll(xml => xml.name == selector); + } + + public struct Enumerator + { + List _source; + string _selector; + int _index; + int _total; + XML _current; + + public Enumerator(List source, string selector) + { + _source = source; + _selector = selector; + _index = -1; + if (_source != null) + _total = _source.Count; + else + _total = 0; + _current = null; + } + + public XML Current + { + get { return _current; } + } + + public bool MoveNext() + { + while (++_index < _total) + { + _current = _source[_index]; + if (_selector == null || _current.name == _selector) + return true; + } + + return false; + } + + public void Erase() + { + _source.RemoveAt(_index); + _total--; + } + + public void Reset() + { + _index = -1; + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs.meta new file mode 100644 index 0000000..ad09775 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLList.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2f086b805cd249140987f7f3ec5b4567 +timeCreated: 1460480287 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs new file mode 100644 index 0000000..ce00722 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs @@ -0,0 +1,133 @@ +using System; +using System.Text; + +namespace FairyGUI.Utils +{ + /// + /// + /// + public class XMLUtils + { + public static string DecodeString(string aSource) + { + int len = aSource.Length; + StringBuilder sb = new StringBuilder(); + int pos1 = 0, pos2 = 0; + + while (true) + { + pos2 = aSource.IndexOf('&', pos1); + if (pos2 == -1) + { + sb.Append(aSource.Substring(pos1)); + break; + } + sb.Append(aSource.Substring(pos1, pos2 - pos1)); + + pos1 = pos2 + 1; + pos2 = pos1; + int end = Math.Min(len, pos2 + 10); + for (; pos2 < end; pos2++) + { + if (aSource[pos2] == ';') + break; + } + if (pos2 < end && pos2 > pos1) + { + string entity = aSource.Substring(pos1, pos2 - pos1); + int u = 0; + if (entity[0] == '#') + { + if (entity.Length > 1) + { + if (entity[1] == 'x') + u = Convert.ToInt16(entity.Substring(2), 16); + else + u = Convert.ToInt16(entity.Substring(1)); + sb.Append((char)u); + pos1 = pos2 + 1; + } + else + sb.Append('&'); + } + else + { + switch (entity) + { + case "amp": + u = 38; + break; + + case "apos": + u = 39; + break; + + case "gt": + u = 62; + break; + + case "lt": + u = 60; + break; + + case "nbsp": + u = 32; + break; + + case "quot": + u = 34; + break; + } + if (u > 0) + { + sb.Append((char)u); + pos1 = pos2 + 1; + } + else + sb.Append('&'); + } + } + else + { + sb.Append('&'); + } + } + + return sb.ToString(); + } + + private static string[] ESCAPES = new string[] { + "&", "&", + "<", "<", + ">", ">", + + "'", "'", + "\"", """, + "\t", " ", + "\n", " ", + "\r", " " + }; + public static void EncodeString(StringBuilder sb, int start, bool isAttribute = false) + { + int count; + int len = isAttribute ? ESCAPES.Length : 6; + for (int i = 0; i < len; i += 2) + { + count = sb.Length - start; + sb.Replace(ESCAPES[i], ESCAPES[i + 1], start, count); + } + } + + public static string EncodeString(string str, bool isAttribute = false) + { + if (string.IsNullOrEmpty(str)) + return ""; + else + { + StringBuilder sb = new StringBuilder(str); + EncodeString(sb, 0); + return sb.ToString(); + } + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs.meta new file mode 100644 index 0000000..3ad90a4 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/XMLUtils.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 11312ca9745d52c4eb8e31630ad5ec7c +timeCreated: 1461773298 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs b/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs new file mode 100644 index 0000000..014eaa2 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs @@ -0,0 +1,114 @@ +namespace FairyGUI.Utils +{ + /// + /// 一个简单的Zip文件处理类。不处理解压。 + /// + public class ZipReader + { + /// + /// + /// + public class ZipEntry + { + public string name; + public int compress; + public uint crc; + public int size; + public int sourceSize; + public int offset; + public bool isDirectory; + } + + ByteBuffer _stream; + int _entryCount; + int _pos; + int _index; + + /// + /// + /// + /// + public ZipReader(byte[] data) + { + _stream = new ByteBuffer(data); + _stream.littleEndian = true; + + int pos = _stream.length - 22; + _stream.position = pos + 10; + _entryCount = _stream.ReadShort(); + _stream.position = pos + 16; + _pos = _stream.ReadInt(); + } + + /// + /// + /// + public int entryCount + { + get { return _entryCount; } + } + + /// + /// + /// + /// + public bool GetNextEntry(ZipEntry entry) + { + if (_index >= _entryCount) + return false; + + _stream.position = _pos + 28; + int len = _stream.ReadUshort(); + int len2 = _stream.ReadUshort() + _stream.ReadUshort(); + + _stream.position = _pos + 46; + string name = _stream.ReadString(len); + name = name.Replace("\\", "/"); + + entry.name = name; + if (name[name.Length - 1] == '/') //directory + { + entry.isDirectory = true; + entry.compress = 0; + entry.crc = 0; + entry.size = entry.sourceSize = 0; + entry.offset = 0; + } + else + { + entry.isDirectory = false; + _stream.position = _pos + 10; + entry.compress = _stream.ReadUshort(); + _stream.position = _pos + 16; + entry.crc = _stream.ReadUint(); + entry.size = _stream.ReadInt(); + entry.sourceSize = _stream.ReadInt(); + _stream.position = _pos + 42; + entry.offset = _stream.ReadInt() + 30 + len; + } + + _pos += 46 + len + len2; + _index++; + + return true; + } + + + /// + /// + /// + /// + /// + public byte[] GetEntryData(ZipEntry entry) + { + byte[] data = new byte[entry.size]; + if (entry.size > 0) + { + _stream.position = entry.offset; + _stream.ReadBytes(data, 0, entry.size); + } + + return data; + } + } +} diff --git a/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs.meta b/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs.meta new file mode 100644 index 0000000..a91eef5 --- /dev/null +++ b/Assets/Plugins/FairyGUI/Scripts/Utils/ZipReader.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8dc25ae9114bda14f998652db54f3af9 +timeCreated: 1535374214 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ResRaw/Fgui.meta b/Assets/ResRaw/Fgui.meta new file mode 100644 index 0000000..3fed60f --- /dev/null +++ b/Assets/ResRaw/Fgui.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6c54db33aa0ac64d98dc1f3c5d0a58d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ResRaw/Fgui/Main_fui.bytes b/Assets/ResRaw/Fgui/Main_fui.bytes new file mode 100644 index 0000000..e116103 Binary files /dev/null and b/Assets/ResRaw/Fgui/Main_fui.bytes differ diff --git a/Assets/ResRaw/Fgui/Main_fui.bytes.meta b/Assets/ResRaw/Fgui/Main_fui.bytes.meta new file mode 100644 index 0000000..639c44d --- /dev/null +++ b/Assets/ResRaw/Fgui/Main_fui.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c477f244a3bf261449146e44d51fc45e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 0000000..403a7fd --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6adb927c7d781544be5adec48ba1b46 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/fgui.meta b/Assets/Resources/fgui.meta new file mode 100644 index 0000000..937c8ad --- /dev/null +++ b/Assets/Resources/fgui.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9140e8683887f314e88e6168def172d4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI.meta b/Assets/Scripts/UI.meta new file mode 100644 index 0000000..57bc8c1 --- /dev/null +++ b/Assets/Scripts/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 82859b393137f124d889beece46c73e5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/Main.meta b/Assets/Scripts/UI/Main.meta new file mode 100644 index 0000000..8f72391 --- /dev/null +++ b/Assets/Scripts/UI/Main.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 655e99e2402c0a0469d88d168daa9a14 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/Main/MainBinder.cs b/Assets/Scripts/UI/Main/MainBinder.cs new file mode 100644 index 0000000..13839bf --- /dev/null +++ b/Assets/Scripts/UI/Main/MainBinder.cs @@ -0,0 +1,16 @@ +/** This is an automatically generated class by FairyGUI. Please do not modify it. **/ + +using FairyGUI; + +namespace Main +{ + public class MainBinder + { + public static void BindAll() + { + UIObjectFactory.SetPackageItemExtension(UI_Main.URL, typeof(UI_Main)); + UIObjectFactory.SetPackageItemExtension(UI_ComboBox1_popup.URL, typeof(UI_ComboBox1_popup)); + UIObjectFactory.SetPackageItemExtension(UI_ProtocolItem.URL, typeof(UI_ProtocolItem)); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Main/MainBinder.cs.meta b/Assets/Scripts/UI/Main/MainBinder.cs.meta new file mode 100644 index 0000000..8f29e7e --- /dev/null +++ b/Assets/Scripts/UI/Main/MainBinder.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f543afde3329dbe4b837822f4a04ff50 \ No newline at end of file diff --git a/Assets/Scripts/UI/Main/UI_ComboBox1_popup.cs b/Assets/Scripts/UI/Main/UI_ComboBox1_popup.cs new file mode 100644 index 0000000..58614ab --- /dev/null +++ b/Assets/Scripts/UI/Main/UI_ComboBox1_popup.cs @@ -0,0 +1,25 @@ +/** This is an automatically generated class by FairyGUI. Please do not modify it. **/ + +using FairyGUI; +using FairyGUI.Utils; + +namespace Main +{ + public partial class UI_ComboBox1_popup : GComponent + { + public GList m_list; + public const string URL = "ui://urg6g4bvtdro5"; + + public static UI_ComboBox1_popup CreateInstance() + { + return (UI_ComboBox1_popup)UIPackage.CreateObject("Main", "ComboBox1_popup"); + } + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + m_list = (GList)GetChildAt(1); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Main/UI_ComboBox1_popup.cs.meta b/Assets/Scripts/UI/Main/UI_ComboBox1_popup.cs.meta new file mode 100644 index 0000000..45f7fa2 --- /dev/null +++ b/Assets/Scripts/UI/Main/UI_ComboBox1_popup.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ee522acd241fd08409489312fdbfebe8 \ No newline at end of file diff --git a/Assets/Scripts/UI/Main/UI_Main.cs b/Assets/Scripts/UI/Main/UI_Main.cs new file mode 100644 index 0000000..14f6993 --- /dev/null +++ b/Assets/Scripts/UI/Main/UI_Main.cs @@ -0,0 +1,35 @@ +/** This is an automatically generated class by FairyGUI. Please do not modify it. **/ + +using FairyGUI; +using FairyGUI.Utils; + +namespace Main +{ + public partial class UI_Main : GComponent + { + public GGraph m_Line1; + public GGraph m_Line2; + public GGraph m_Line3; + public GComboBox m_ComboxProtocol; + public GComboBox m_ComboxAccount; + public GGraph m_BtnOpenAccount; + public const string URL = "ui://urg6g4bvpsm50"; + + public static UI_Main CreateInstance() + { + return (UI_Main)UIPackage.CreateObject("Main", "Main"); + } + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + m_Line1 = (GGraph)GetChildAt(1); + m_Line2 = (GGraph)GetChildAt(2); + m_Line3 = (GGraph)GetChildAt(3); + m_ComboxProtocol = (GComboBox)GetChildAt(7); + m_ComboxAccount = (GComboBox)GetChildAt(8); + m_BtnOpenAccount = (GGraph)GetChildAt(11); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Main/UI_Main.cs.meta b/Assets/Scripts/UI/Main/UI_Main.cs.meta new file mode 100644 index 0000000..982f52c --- /dev/null +++ b/Assets/Scripts/UI/Main/UI_Main.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9f0e6e702c89cbd489092a69f9a6873f \ No newline at end of file diff --git a/Assets/Scripts/UI/Main/UI_ProtocolItem.cs b/Assets/Scripts/UI/Main/UI_ProtocolItem.cs new file mode 100644 index 0000000..4c7c35b --- /dev/null +++ b/Assets/Scripts/UI/Main/UI_ProtocolItem.cs @@ -0,0 +1,27 @@ +/** This is an automatically generated class by FairyGUI. Please do not modify it. **/ + +using FairyGUI; +using FairyGUI.Utils; + +namespace Main +{ + public partial class UI_ProtocolItem : GComponent + { + public GLabel m_InputValue; + public GTextField m_title; + public const string URL = "ui://urg6g4bvtdro7"; + + public static UI_ProtocolItem CreateInstance() + { + return (UI_ProtocolItem)UIPackage.CreateObject("Main", "ProtocolItem"); + } + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + m_InputValue = (GLabel)GetChildAt(0); + m_title = (GTextField)GetChildAt(1); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Main/UI_ProtocolItem.cs.meta b/Assets/Scripts/UI/Main/UI_ProtocolItem.cs.meta new file mode 100644 index 0000000..1b1d63a --- /dev/null +++ b/Assets/Scripts/UI/Main/UI_ProtocolItem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fcda0674295fce0448bf5f60d3e3d9f9 \ No newline at end of file diff --git a/FGUIProject/assets/Package1/BtnCommon.xml b/FGUIProject/assets/Main/BtnCommon.xml similarity index 100% rename from FGUIProject/assets/Package1/BtnCommon.xml rename to FGUIProject/assets/Main/BtnCommon.xml diff --git a/FGUIProject/assets/Package1/BtnCommonBig.xml b/FGUIProject/assets/Main/BtnCommonBig.xml similarity index 100% rename from FGUIProject/assets/Package1/BtnCommonBig.xml rename to FGUIProject/assets/Main/BtnCommonBig.xml diff --git a/FGUIProject/assets/Package1/ComboBox1.xml b/FGUIProject/assets/Main/ComboBox1.xml similarity index 100% rename from FGUIProject/assets/Package1/ComboBox1.xml rename to FGUIProject/assets/Main/ComboBox1.xml diff --git a/FGUIProject/assets/Package1/ComboBox1_item.xml b/FGUIProject/assets/Main/ComboBox1_item.xml similarity index 100% rename from FGUIProject/assets/Package1/ComboBox1_item.xml rename to FGUIProject/assets/Main/ComboBox1_item.xml diff --git a/FGUIProject/assets/Package1/ComboBox1_popup.xml b/FGUIProject/assets/Main/ComboBox1_popup.xml similarity index 100% rename from FGUIProject/assets/Package1/ComboBox1_popup.xml rename to FGUIProject/assets/Main/ComboBox1_popup.xml diff --git a/FGUIProject/assets/Package1/CommonInput.xml b/FGUIProject/assets/Main/CommonInput.xml similarity index 100% rename from FGUIProject/assets/Package1/CommonInput.xml rename to FGUIProject/assets/Main/CommonInput.xml diff --git a/FGUIProject/assets/Package1/LogTag.xml b/FGUIProject/assets/Main/LogTag.xml similarity index 100% rename from FGUIProject/assets/Package1/LogTag.xml rename to FGUIProject/assets/Main/LogTag.xml diff --git a/FGUIProject/assets/Package1/Main.xml b/FGUIProject/assets/Main/Main.xml similarity index 100% rename from FGUIProject/assets/Package1/Main.xml rename to FGUIProject/assets/Main/Main.xml diff --git a/FGUIProject/assets/Package1/ProtocolItem.xml b/FGUIProject/assets/Main/ProtocolItem.xml similarity index 100% rename from FGUIProject/assets/Package1/ProtocolItem.xml rename to FGUIProject/assets/Main/ProtocolItem.xml diff --git a/FGUIProject/assets/Package1/package.xml b/FGUIProject/assets/Main/package.xml similarity index 95% rename from FGUIProject/assets/Package1/package.xml rename to FGUIProject/assets/Main/package.xml index d28a655..1b5dcdb 100644 --- a/FGUIProject/assets/Package1/package.xml +++ b/FGUIProject/assets/Main/package.xml @@ -11,5 +11,5 @@ - + \ No newline at end of file diff --git a/FGUIProject/settings/Publish.json b/FGUIProject/settings/Publish.json new file mode 100644 index 0000000..c1cd6bb --- /dev/null +++ b/FGUIProject/settings/Publish.json @@ -0,0 +1,35 @@ +{ + "path": "../Assets/ResRaw/Fgui", + "branchPath": "", + "fileExtension": "bytes", + "packageCount": 2, + "compressDesc": true, + "binaryFormat": true, + "jpegQuality": 80, + "compressPNG": false, + "codeGeneration": { + "allowGenCode": true, + "codePath": "../Assets/Scripts/UI", + "classNamePrefix": "UI_", + "memberNamePrefix": "m_", + "packageName": null, + "ignoreNoname": true, + "getMemberByName": false, + "codeType": "" + }, + "includeHighResolution": 0, + "branchProcessing": 0, + "seperatedAtlasForBranch": false, + "atlasSetting": { + "maxSize": 2048, + "paging": true, + "sizeOption": "pot", + "forceSquare": false, + "allowRotation": false, + "trimImage": true + }, + "include2x": false, + "include3x": false, + "include4x": false, + "fileName": "Publish" +} \ No newline at end of file