diff --git a/Assets/PerfectWorld/Prefab/UI/HUD.prefab b/Assets/PerfectWorld/Prefab/UI/HUD.prefab
index d0b9428cff..1f37053c03 100644
--- a/Assets/PerfectWorld/Prefab/UI/HUD.prefab
+++ b/Assets/PerfectWorld/Prefab/UI/HUD.prefab
@@ -76,6 +76,81 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!1 &632865997972347848
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8837273039564160111}
+ - component: {fileID: 4177656198253217281}
+ - component: {fileID: 4792705315392219372}
+ m_Layer: 5
+ m_Name: Checkmark
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &8837273039564160111
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 632865997972347848}
+ 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: 8592426758632489926}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &4177656198253217281
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 632865997972347848}
+ m_CullTransparentMesh: 1
+--- !u!114 &4792705315392219372
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 632865997972347848}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: -2152444580018807177, guid: 7c25a5fa6c0f21a4293b99a5a43b5441, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
--- !u!1 &955704001844978227
GameObject:
m_ObjectHideFlags: 0
@@ -87,6 +162,7 @@ GameObject:
- component: {fileID: 2127540135059465312}
- component: {fileID: 2085804573552353186}
- component: {fileID: 5477947404616405472}
+ - component: {fileID: 2090693574295861813}
m_Layer: 5
m_Name: Avatar
m_TagString: Untagged
@@ -151,6 +227,50 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!114 &2090693574295861813
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 955704001844978227}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 5477947404616405472}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
--- !u!1 &974102734944724072
GameObject:
m_ObjectHideFlags: 0
@@ -423,6 +543,96 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &1248080925961286621
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 778012161491070036}
+ - component: {fileID: 6151875038437477037}
+ - component: {fileID: 784110968561142913}
+ - component: {fileID: 6992427396739263859}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &778012161491070036
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1248080925961286621}
+ 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: 707320484017867396}
+ m_Father: {fileID: 129645434728095412}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 10, y: -10}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6151875038437477037
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1248080925961286621}
+ m_CullTransparentMesh: 1
+--- !u!114 &784110968561142913
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1248080925961286621}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!114 &6992427396739263859
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1248080925961286621}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ShowMaskGraphic: 1
--- !u!1 &1327388134249139498
GameObject:
m_ObjectHideFlags: 0
@@ -499,6 +709,176 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!1 &2461742091615804038
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7087492923537698131}
+ - component: {fileID: 3107802620589095628}
+ m_Layer: 5
+ m_Name: Toggle (1)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7087492923537698131
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2461742091615804038}
+ 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: 2357901029204215679}
+ m_Father: {fileID: 7708887638066944733}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &3107802620589095628
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2461742091615804038}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 0
+ m_TargetGraphic: {fileID: 5653877102693886154}
+ toggleTransition: 1
+ graphic: {fileID: 1326322459205397544}
+ m_Group: {fileID: 0}
+ onValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_IsOn: 1
+--- !u!1 &2554505005645259637
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7924665791547601326}
+ - component: {fileID: 4958242990544948893}
+ m_Layer: 5
+ m_Name: Toggle (2)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7924665791547601326
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2554505005645259637}
+ 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: 1010059016406425705}
+ m_Father: {fileID: 7708887638066944733}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &4958242990544948893
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2554505005645259637}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 0
+ m_TargetGraphic: {fileID: 3090420823223294656}
+ toggleTransition: 1
+ graphic: {fileID: 315920432253704908}
+ m_Group: {fileID: 0}
+ onValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_IsOn: 1
--- !u!1 &2621599687005268648
GameObject:
m_ObjectHideFlags: 0
@@ -575,6 +955,321 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!1 &2685289014465104035
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1417503831413773142}
+ - component: {fileID: 8569364972640151780}
+ - component: {fileID: 315920432253704908}
+ m_Layer: 5
+ m_Name: Checkmark
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1417503831413773142
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2685289014465104035}
+ 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: 1010059016406425705}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8569364972640151780
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2685289014465104035}
+ m_CullTransparentMesh: 1
+--- !u!114 &315920432253704908
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2685289014465104035}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: -2152444580018807177, guid: 7c25a5fa6c0f21a4293b99a5a43b5441, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!1 &2724055426704576659
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2550599013755514388}
+ - component: {fileID: 6382295136484770581}
+ - component: {fileID: 1326322459205397544}
+ m_Layer: 5
+ m_Name: Checkmark
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2550599013755514388
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2724055426704576659}
+ 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: 2357901029204215679}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6382295136484770581
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2724055426704576659}
+ m_CullTransparentMesh: 1
+--- !u!114 &1326322459205397544
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2724055426704576659}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: -2152444580018807177, guid: 7c25a5fa6c0f21a4293b99a5a43b5441, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!1 &2985336126980033672
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7708887638066944733}
+ - component: {fileID: 8758771894336849492}
+ - component: {fileID: 7622385564662637144}
+ - component: {fileID: 5227547257879433914}
+ m_Layer: 5
+ m_Name: Panel
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7708887638066944733
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2985336126980033672}
+ 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: 3951120581356990872}
+ - {fileID: 7087492923537698131}
+ - {fileID: 7924665791547601326}
+ - {fileID: 129645434728095412}
+ m_Father: {fileID: 6806681442789174374}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 133.1923, y: -138.03845}
+ m_SizeDelta: {x: 0, y: 11}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &8758771894336849492
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2985336126980033672}
+ m_CullTransparentMesh: 1
+--- !u!114 &7622385564662637144
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2985336126980033672}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 0
+ m_Right: 0
+ m_Top: 0
+ m_Bottom: 0
+ m_ChildAlignment: 0
+ m_Spacing: 25
+ m_ChildForceExpandWidth: 1
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 0
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &5227547257879433914
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2985336126980033672}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 2
+ m_VerticalFit: 0
+--- !u!1 &3074081312176361136
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 707320484017867396}
+ - component: {fileID: 8093549270040003929}
+ - component: {fileID: 8233982861901735215}
+ m_Layer: 5
+ m_Name: Checkmark
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &707320484017867396
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3074081312176361136}
+ 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: 778012161491070036}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8093549270040003929
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3074081312176361136}
+ m_CullTransparentMesh: 1
+--- !u!114 &8233982861901735215
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3074081312176361136}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: -2152444580018807177, guid: 7c25a5fa6c0f21a4293b99a5a43b5441, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
--- !u!1 &3087718937344452328
GameObject:
m_ObjectHideFlags: 0
@@ -727,6 +1422,82 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!1 &3663290235883915697
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3450976418008317958}
+ - component: {fileID: 2668978278628610443}
+ - component: {fileID: 1129127416837190756}
+ m_Layer: 5
+ m_Name: ApImage
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &3450976418008317958
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3663290235883915697}
+ 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: 4261305575195229891}
+ m_Father: {fileID: 6806681442789174374}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 3.0769234, y: -53.846153}
+ m_SizeDelta: {x: 199, y: 11}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2668978278628610443
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3663290235883915697}
+ m_CullTransparentMesh: 1
+--- !u!114 &1129127416837190756
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 3663290235883915697}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 0.3844105, b: 0, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 7482667652216324306, guid: b404da7f8f4b96f459d1c8caa65f7cf8, type: 3}
+ m_Type: 3
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 0
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
--- !u!1 &4131166278565359271
GameObject:
m_ObjectHideFlags: 0
@@ -863,6 +1634,96 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &4355146062808989997
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2357901029204215679}
+ - component: {fileID: 8450074667095074575}
+ - component: {fileID: 5653877102693886154}
+ - component: {fileID: 8966178417839389522}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2357901029204215679
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4355146062808989997}
+ 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: 2550599013755514388}
+ m_Father: {fileID: 7087492923537698131}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 10, y: -10}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8450074667095074575
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4355146062808989997}
+ m_CullTransparentMesh: 1
+--- !u!114 &5653877102693886154
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4355146062808989997}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!114 &8966178417839389522
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4355146062808989997}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ShowMaskGraphic: 1
--- !u!1 &4823752405346273106
GameObject:
m_ObjectHideFlags: 0
@@ -900,6 +1761,8 @@ RectTransform:
- {fileID: 534925566466250660}
- {fileID: 4368626321871940460}
- {fileID: 5777532589522199890}
+ - {fileID: 3450976418008317958}
+ - {fileID: 7708887638066944733}
- {fileID: 8118804085881780215}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -1007,10 +1870,17 @@ MonoBehaviour:
expText: {fileID: 3984476637502251390}
nameText: {fileID: 1464374634028484465}
levelText: {fileID: 8867137494968155958}
+ spText: {fileID: 2384898049749086181}
healthImage: {fileID: 8086917028654197348}
manaImage: {fileID: 5335503683694560306}
expImage: {fileID: 3414706020273276291}
- m_btnOpenCharacter: {fileID: 0}
+ apImage: {fileID: 1129127416837190756}
+ apToggles:
+ - {fileID: 1929595075606122828}
+ - {fileID: 3107802620589095628}
+ - {fileID: 4958242990544948893}
+ - {fileID: 840603349639584132}
+ m_btnOpenCharacter: {fileID: 2090693574295861813}
neededExp: 0
--- !u!1 &4933898273451627870
GameObject:
@@ -1148,6 +2018,492 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &5159401559539371023
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 129645434728095412}
+ - component: {fileID: 840603349639584132}
+ m_Layer: 5
+ m_Name: Toggle (3)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &129645434728095412
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5159401559539371023}
+ 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: 778012161491070036}
+ m_Father: {fileID: 7708887638066944733}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &840603349639584132
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5159401559539371023}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 0
+ m_TargetGraphic: {fileID: 784110968561142913}
+ toggleTransition: 1
+ graphic: {fileID: 8233982861901735215}
+ m_Group: {fileID: 0}
+ onValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_IsOn: 1
+--- !u!1 &5705806074702426115
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 4261305575195229891}
+ - component: {fileID: 6286170222463279887}
+ - component: {fileID: 2384898049749086181}
+ m_Layer: 5
+ m_Name: APtext
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &4261305575195229891
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5705806074702426115}
+ 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: 3450976418008317958}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: -2.8752, y: 0}
+ m_SizeDelta: {x: -20.6339, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &6286170222463279887
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5705806074702426115}
+ m_CullTransparentMesh: 1
+--- !u!114 &2384898049749086181
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5705806074702426115}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_text:
+ m_isRightToLeft: 0
+ m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
+ m_sharedMaterial: {fileID: 2100000, guid: 31b77628c21b17e45a6577a3d3d5aef0, type: 2}
+ m_fontSharedMaterials: []
+ m_fontMaterial: {fileID: 0}
+ m_fontMaterials: []
+ m_fontColor32:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+ m_enableVertexGradient: 0
+ m_colorMode: 3
+ m_fontColorGradient:
+ topLeft: {r: 1, g: 1, b: 1, a: 1}
+ topRight: {r: 1, g: 1, b: 1, a: 1}
+ bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+ bottomRight: {r: 1, g: 1, b: 1, a: 1}
+ m_fontColorGradientPreset: {fileID: 0}
+ m_spriteAsset: {fileID: 0}
+ m_tintAllSprites: 0
+ m_StyleSheet: {fileID: 0}
+ m_TextStyleHashCode: -1183493901
+ m_overrideHtmlColors: 0
+ m_faceColor:
+ serializedVersion: 2
+ rgba: 4294967295
+ m_fontSize: 17
+ m_fontSizeBase: 17
+ m_fontWeight: 400
+ m_enableAutoSizing: 0
+ m_fontSizeMin: 1
+ m_fontSizeMax: 18
+ m_fontStyle: 1
+ m_HorizontalAlignment: 2
+ m_VerticalAlignment: 512
+ m_textAlignment: 65535
+ m_characterSpacing: 0
+ m_wordSpacing: 0
+ m_lineSpacing: 0
+ m_lineSpacingMax: 0
+ m_paragraphSpacing: 0
+ m_charWidthMaxAdj: 0
+ m_TextWrappingMode: 0
+ m_wordWrappingRatios: 0.4
+ m_overflowMode: 0
+ m_linkedTextComponent: {fileID: 0}
+ parentLinkedComponent: {fileID: 0}
+ m_enableKerning: 0
+ m_ActiveFontFeatures: 6e72656b
+ m_enableExtraPadding: 0
+ checkPaddingRequired: 0
+ m_isRichText: 1
+ m_EmojiFallbackSupport: 1
+ m_parseCtrlCharacters: 1
+ m_isOrthographic: 1
+ m_isCullingEnabled: 0
+ m_horizontalMapping: 0
+ m_verticalMapping: 0
+ m_uvLineOffset: 0
+ m_geometrySortingOrder: 0
+ m_IsTextObjectScaleStatic: 0
+ m_VertexBufferAutoSizeReduction: 0
+ m_useMaxVisibleDescender: 1
+ m_pageToDisplay: 1
+ m_margin: {x: 0, y: 0, z: 0, w: 0}
+ m_isUsingLegacyAnimationComponent: 0
+ m_isVolumetricText: 0
+ m_hasFontAssetChanged: 0
+ m_baseMaterial: {fileID: 0}
+ m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1 &6384938568068014785
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 3951120581356990872}
+ - component: {fileID: 1929595075606122828}
+ m_Layer: 5
+ m_Name: Toggle
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &3951120581356990872
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6384938568068014785}
+ 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: 8592426758632489926}
+ m_Father: {fileID: 7708887638066944733}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1929595075606122828
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6384938568068014785}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 0
+ m_TargetGraphic: {fileID: 8373646983817986339}
+ toggleTransition: 1
+ graphic: {fileID: 4792705315392219372}
+ m_Group: {fileID: 0}
+ onValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_IsOn: 1
+--- !u!1 &6650573448589078646
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1010059016406425705}
+ - component: {fileID: 7778852687110478854}
+ - component: {fileID: 3090420823223294656}
+ - component: {fileID: 2281163308670388722}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1010059016406425705
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6650573448589078646}
+ 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: 1417503831413773142}
+ m_Father: {fileID: 7924665791547601326}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 10, y: -10}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7778852687110478854
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6650573448589078646}
+ m_CullTransparentMesh: 1
+--- !u!114 &3090420823223294656
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6650573448589078646}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!114 &2281163308670388722
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6650573448589078646}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ShowMaskGraphic: 1
+--- !u!1 &7965461020241720480
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8592426758632489926}
+ - component: {fileID: 8385866081888887197}
+ - component: {fileID: 8373646983817986339}
+ - component: {fileID: 3319912464364109697}
+ m_Layer: 5
+ m_Name: Background
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &8592426758632489926
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7965461020241720480}
+ 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: 8837273039564160111}
+ m_Father: {fileID: 3951120581356990872}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 10, y: -10}
+ m_SizeDelta: {x: 20, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8385866081888887197
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7965461020241720480}
+ m_CullTransparentMesh: 1
+--- !u!114 &8373646983817986339
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7965461020241720480}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!114 &3319912464364109697
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7965461020241720480}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_ShowMaskGraphic: 1
--- !u!1 &8054530446250643719
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/PerfectWorld/Prefab/UI/HUDNPC.prefab b/Assets/PerfectWorld/Prefab/UI/HUDNPC.prefab
index 9a8af0fd20..c7033b2bec 100644
--- a/Assets/PerfectWorld/Prefab/UI/HUDNPC.prefab
+++ b/Assets/PerfectWorld/Prefab/UI/HUDNPC.prefab
@@ -11,6 +11,7 @@ GameObject:
- component: {fileID: 8841982213385894347}
- component: {fileID: 1981970930610958667}
- component: {fileID: 2949641406655472012}
+ - component: {fileID: 1500706965934165254}
m_Layer: 5
m_Name: AvatarNPCFrame
m_TagString: Untagged
@@ -75,6 +76,50 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!114 &1500706965934165254
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1273460584854605297}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 0
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 2949641406655472012}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
--- !u!1 &5010991128992349155
GameObject:
m_ObjectHideFlags: 0
@@ -125,6 +170,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: d072871c8791e284dbad61ce13ba6887, type: 3}
m_Name:
m_EditorClassIdentifier:
+ _NPCIconBtn: {fileID: 1500706965934165254}
_healthText: {fileID: 8148604647689649493}
_nameText: {fileID: 8459104239633154731}
_statText: {fileID: 7225922753763360209}
diff --git a/Assets/PerfectWorld/Prefab/UI/PlayerOptionPopup.prefab b/Assets/PerfectWorld/Prefab/UI/PlayerOptionPopup.prefab
index 61f908b24d..51c6726855 100644
--- a/Assets/PerfectWorld/Prefab/UI/PlayerOptionPopup.prefab
+++ b/Assets/PerfectWorld/Prefab/UI/PlayerOptionPopup.prefab
@@ -13,7 +13,7 @@ GameObject:
- component: {fileID: 369226366953714584}
- component: {fileID: 5824452892770569602}
m_Layer: 0
- m_Name: Button
+ m_Name: ViewInfoBtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -116,7 +116,7 @@ MonoBehaviour:
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
- m_Interactable: 1
+ m_Interactable: 0
m_TargetGraphic: {fileID: 369226366953714584}
m_OnClick:
m_PersistentCalls:
@@ -186,7 +186,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: Invite
+ m_text: "Th\xF4ng tin"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
@@ -322,7 +322,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: Invite
+ m_text: "H\u1EA3o h\u1EEFu"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
@@ -406,7 +406,7 @@ GameObject:
- component: {fileID: 3492245093881047436}
- component: {fileID: 3003899918887861263}
m_Layer: 0
- m_Name: Button (3)
+ m_Name: AddFriendBtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -509,7 +509,7 @@ MonoBehaviour:
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
- m_Interactable: 1
+ m_Interactable: 0
m_TargetGraphic: {fileID: 3492245093881047436}
m_OnClick:
m_PersistentCalls:
@@ -555,11 +555,11 @@ RectTransform:
- {fileID: 1669886433399658208}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: -131.74634, y: 298}
- m_SizeDelta: {x: -1613.0662, y: -755.5913}
- m_Pivot: {x: 0.5, y: 0.5}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 400, y: -37.5}
+ m_SizeDelta: {x: 150, y: 425}
+ m_Pivot: {x: 0.5, y: 1}
--- !u!222 &13802954905842244
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -709,7 +709,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: Invite
+ m_text: "M\u1EADt th\u01B0"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
@@ -793,7 +793,7 @@ GameObject:
- component: {fileID: 406036714762731199}
- component: {fileID: 5865049054598941117}
m_Layer: 0
- m_Name: Button (6)
+ m_Name: CloseBtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -914,7 +914,7 @@ GameObject:
- component: {fileID: 813625907549247604}
- component: {fileID: 2850233128939703198}
m_Layer: 0
- m_Name: Button (5)
+ m_Name: WhisperBtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -1017,7 +1017,7 @@ MonoBehaviour:
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
- m_Interactable: 1
+ m_Interactable: 0
m_TargetGraphic: {fileID: 813625907549247604}
m_OnClick:
m_PersistentCalls:
@@ -1035,7 +1035,7 @@ GameObject:
- component: {fileID: 5920694446394689008}
- component: {fileID: 4902789969648325767}
m_Layer: 0
- m_Name: Button (4)
+ m_Name: DualBtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -1292,7 +1292,7 @@ GameObject:
- component: {fileID: 2244784699714630255}
- component: {fileID: 3824246320618496704}
m_Layer: 0
- m_Name: Button (1)
+ m_Name: TeamInviteBtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -1395,7 +1395,7 @@ MonoBehaviour:
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
- m_Interactable: 1
+ m_Interactable: 0
m_TargetGraphic: {fileID: 2244784699714630255}
m_OnClick:
m_PersistentCalls:
@@ -1465,7 +1465,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: Invite
+ m_text: "Giao d\u1ECBch"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
@@ -1549,7 +1549,7 @@ GameObject:
- component: {fileID: 5543320715835409967}
- component: {fileID: 3975306851607848952}
m_Layer: 0
- m_Name: Button (2)
+ m_Name: TradeBtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -1652,7 +1652,7 @@ MonoBehaviour:
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
- m_Interactable: 1
+ m_Interactable: 0
m_TargetGraphic: {fileID: 5543320715835409967}
m_OnClick:
m_PersistentCalls:
@@ -1722,7 +1722,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: Invite
+ m_text: "\u0110\xF3ng"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
@@ -1858,7 +1858,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: Invite
+ m_text: "T\u1ED5 \u0111\u1ED9i"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
diff --git a/Assets/PerfectWorld/Prefab/UI/Teamate.prefab b/Assets/PerfectWorld/Prefab/UI/Teamate.prefab
index bca1e95cfb..be386da4b5 100644
--- a/Assets/PerfectWorld/Prefab/UI/Teamate.prefab
+++ b/Assets/PerfectWorld/Prefab/UI/Teamate.prefab
@@ -1427,6 +1427,7 @@ RectTransform:
- {fileID: 6747937870382540800}
- {fileID: 9145156114905100934}
- {fileID: 1392280977313824629}
+ - {fileID: 7829150308709081067}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
@@ -1484,6 +1485,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 52c15f7b28624ef4697b1f7eb3a0d17c, type: 3}
m_Name:
m_EditorClassIdentifier:
+ skillNameText: {fileID: 0}
+ imageProgress: {fileID: 0}
Content_Teammates: {fileID: 2702288869473602435}
TeammateItemPrefab: {fileID: 5014101816795320943, guid: ef1af109634dbf44da065d64dc30fa38, type: 3}
Content_Nearby: {fileID: 4562375036863719405}
@@ -6166,6 +6169,138 @@ MonoBehaviour:
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
+--- !u!1 &7140757019260147103
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7829150308709081067}
+ - component: {fileID: 615136352827836387}
+ - component: {fileID: 3391660217384508209}
+ - component: {fileID: 4321133568498195476}
+ m_Layer: 5
+ m_Name: close_btn
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7829150308709081067
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7140757019260147103}
+ 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: 7364890917756710219}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 426.97388, y: 272.67}
+ m_SizeDelta: {x: 30.682, y: 31.93}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &615136352827836387
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7140757019260147103}
+ m_CullTransparentMesh: 1
+--- !u!114 &3391660217384508209
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7140757019260147103}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: fb2f2f58be45f6e4890e85cc00b0bcc9, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!114 &4321133568498195476
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7140757019260147103}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 3391660217384508209}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls:
+ - m_Target: {fileID: 2452003196178065293}
+ m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
+ m_MethodName: SetActive
+ m_Mode: 6
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
--- !u!1 &7172228088205297695
GameObject:
m_ObjectHideFlags: 0
@@ -8448,7 +8583,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2128182273890188768, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
propertyPath: m_AnchorMax.y
- value: 0
+ value: 1
objectReference: {fileID: 0}
- target: {fileID: 2128182273890188768, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
propertyPath: m_AnchorMin.x
@@ -8456,15 +8591,15 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2128182273890188768, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
propertyPath: m_AnchorMin.y
- value: 0
+ value: 1
objectReference: {fileID: 0}
- target: {fileID: 2128182273890188768, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
propertyPath: m_SizeDelta.x
- value: 0
+ value: 300
objectReference: {fileID: 0}
- target: {fileID: 2128182273890188768, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
propertyPath: m_SizeDelta.y
- value: 0
+ value: 60
objectReference: {fileID: 0}
- target: {fileID: 2128182273890188768, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
propertyPath: m_LocalPosition.x
@@ -8496,11 +8631,11 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2128182273890188768, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
propertyPath: m_AnchoredPosition.x
- value: 0
+ value: 154
objectReference: {fileID: 0}
- target: {fileID: 2128182273890188768, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
propertyPath: m_AnchoredPosition.y
- value: 0
+ value: -35
objectReference: {fileID: 0}
- target: {fileID: 2128182273890188768, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
@@ -8522,6 +8657,10 @@ PrefabInstance:
propertyPath: m_Name
value: team_item
objectReference: {fileID: 0}
+ - target: {fileID: 8777891425110263910, guid: df9492e8a45f4b047bf5ffedaf2921ab, type: 3}
+ propertyPath: m_IsActive
+ value: 0
+ objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
diff --git a/Assets/PerfectWorld/Prefab/UIManager.prefab b/Assets/PerfectWorld/Prefab/UIManager.prefab
index fbbecd21f8..388b49e522 100644
--- a/Assets/PerfectWorld/Prefab/UIManager.prefab
+++ b/Assets/PerfectWorld/Prefab/UIManager.prefab
@@ -892,8 +892,9 @@ GameObject:
- component: {fileID: 2091984348760918456}
- component: {fileID: 7421153329155037236}
- component: {fileID: 2013061949432893537}
+ - component: {fileID: 3809367002469310901}
m_Layer: 5
- m_Name: EscapeBtn
+ m_Name: CheatBtn
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -1001,6 +1002,25 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
+--- !u!114 &3809367002469310901
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 934635620553056957}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 87e48b7c6bcd168488be9b7f20929389, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _panelConsole: {fileID: 0}
+ _consoleInput: {fileID: 0}
+ _btnSend: {fileID: 0}
+ _btnOpen: {fileID: 0}
+ _btnClose: {fileID: 0}
+ _btnNoCooldown: {fileID: 0}
+ _btnToggleAutoWrath: {fileID: 2013061949432893537}
--- !u!1 &1131583467895984856
GameObject:
m_ObjectHideFlags: 0
@@ -1742,6 +1762,7 @@ RectTransform:
- {fileID: 3483809415181351540}
- {fileID: 7451658084820611230}
- {fileID: 7749074831901819156}
+ - {fileID: 5949267495910746152}
m_Father: {fileID: 2780428059708698453}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -3700,6 +3721,138 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
ReviveOptionPopup: {fileID: 8167981555289453890}
+--- !u!1 &5205684319691355829
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 5949267495910746152}
+ - component: {fileID: 7890254496648781869}
+ - component: {fileID: 6788332871332871105}
+ - component: {fileID: 6273023266110177064}
+ m_Layer: 0
+ m_Name: team_btn
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &5949267495910746152
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5205684319691355829}
+ 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: 3233441867675090637}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: -917, y: 8}
+ m_SizeDelta: {x: 73, y: 73}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7890254496648781869
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5205684319691355829}
+ m_CullTransparentMesh: 1
+--- !u!114 &6788332871332871105
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5205684319691355829}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: c04ad7bf53935474098e0dc16aa3a0e5, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!114 &6273023266110177064
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5205684319691355829}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 6788332871332871105}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls:
+ - m_Target: {fileID: 1890210201668811196}
+ m_TargetAssemblyTypeName: CECUIManager, Assembly-CSharp
+ m_MethodName: ShowUI
+ m_Mode: 5
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument: Win_ArrangeTeam
+ m_BoolArgument: 0
+ m_CallState: 2
--- !u!1 &5490291313877083687
GameObject:
m_ObjectHideFlags: 0
@@ -5391,7 +5544,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: Escape
+ m_text: Inf Fury
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
@@ -7964,7 +8117,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 776624419558043962, guid: 22d3972b131ebdb4288f9cbdf996d691, type: 3}
propertyPath: m_text
- value: 44650
+ value: 74850388
objectReference: {fileID: 0}
- target: {fileID: 848034462487949471, guid: 22d3972b131ebdb4288f9cbdf996d691, type: 3}
propertyPath: m_AnchorMax.y
@@ -13481,6 +13634,46 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 3233441867675090637}
m_Modifications:
+ - target: {fileID: 129645434728095412, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 129645434728095412, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 129645434728095412, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 129645434728095412, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 2328170557809189909, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_btnOpenCharacter
+ value:
+ objectReference: {fileID: 3803409312124193147}
+ - target: {fileID: 3450976418008317958, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 3.0769196
+ objectReference: {fileID: 0}
+ - target: {fileID: 3951120581356990872, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3951120581356990872, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3951120581356990872, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3951120581356990872, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0
+ objectReference: {fileID: 0}
- target: {fileID: 4823752405346273106, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
propertyPath: m_Name
value: HUDPlayer
@@ -13565,6 +13758,42 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
+ - target: {fileID: 7087492923537698131, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7087492923537698131, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7087492923537698131, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7087492923537698131, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7708887638066944733, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7924665791547601326, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7924665791547601326, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7924665791547601326, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 7924665791547601326, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0
+ objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
@@ -13575,6 +13804,17 @@ RectTransform:
m_CorrespondingSourceObject: {fileID: 6806681442789174374, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
m_PrefabInstance: {fileID: 8515915288329029910}
m_PrefabAsset: {fileID: 0}
+--- !u!114 &3803409312124193147 stripped
+MonoBehaviour:
+ m_CorrespondingSourceObject: {fileID: 4820812356310843501, guid: 76408ccdbeb4c654291462fcff24a8c5, type: 3}
+ m_PrefabInstance: {fileID: 8515915288329029910}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1001 &8966214373927126746
PrefabInstance:
m_ObjectHideFlags: 0
diff --git a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset
index 056efe4255..532d9eec59 100644
--- a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset
+++ b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset
@@ -55,3 +55,5 @@ MonoBehaviour:
prefab: {fileID: 3120870614492201289, guid: eaebf3351c396754fb983e0d5ba83e9a, type: 3}
- id: DlgPetRec
prefab: {fileID: 4739268381143404558, guid: 37f331119e0524018a0a7266aa257777, type: 3}
+ - id: Win_Message2
+ prefab: {fileID: 1590197940424963217, guid: 0c248d0510a114829b58d62d2ecc3b5e, type: 3}
diff --git a/Assets/PerfectWorld/Scene/Bootstrap.unity b/Assets/PerfectWorld/Scene/Bootstrap.unity
index 6ef985d281..35a895d61b 100644
--- a/Assets/PerfectWorld/Scene/Bootstrap.unity
+++ b/Assets/PerfectWorld/Scene/Bootstrap.unity
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:84e412b6f5e36bb93f0b17ced95c929c8773b7ed9d513f792a0f4664d78b7014
-size 282581
+oid sha256:57bb52418b44eb7e3e333915973057be091b0826983b641ceb05263b4dffe2e4
+size 287382
diff --git a/Assets/PerfectWorld/Scripts/DebugCommandMenu/DlgConsole.cs b/Assets/PerfectWorld/Scripts/DebugCommandMenu/DlgConsole.cs
index 5a0897bb8c..200606332a 100644
--- a/Assets/PerfectWorld/Scripts/DebugCommandMenu/DlgConsole.cs
+++ b/Assets/PerfectWorld/Scripts/DebugCommandMenu/DlgConsole.cs
@@ -1,4 +1,6 @@
using BrewMonster.Network;
+using System.Collections;
+using EditorAttributes;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
@@ -18,6 +20,10 @@ namespace BrewMonster.Scripts
[Space(10)]
[Header("Command Buttons")]
[SerializeField] Button _btnNoCooldown;
+ [SerializeField] Button _btnToggleAutoWrath;
+
+ private bool _isAutoAddWrathEnabled = false;
+ private Coroutine _autoAddWrathCoroutine;
private void Awake()
{
@@ -25,8 +31,21 @@ namespace BrewMonster.Scripts
_btnOpen?.onClick.AddListener(OnBtnOpenClicked);
_btnClose?.onClick.AddListener(OnBtnCloseClicked);
_btnNoCooldown?.onClick.AddListener(OnBtnNoCooldownClicked);
- }
+ _btnToggleAutoWrath?.onClick.AddListener(OnBtnToggleAutoWrathClicked);
+ DontDestroyOnLoad(this);
+ }
+
+ private void OnDestroy()
+ {
+ // Stop coroutine if running when object is destroyed
+ // 对象销毁时如果协程正在运行则停止它
+ if (_autoAddWrathCoroutine != null)
+ {
+ StopCoroutine(_autoAddWrathCoroutine);
+ _autoAddWrathCoroutine = null;
+ }
+ }
#region button events
private void OnBtnSendClicked()
@@ -57,6 +76,60 @@ namespace BrewMonster.Scripts
{
UnityGameSession.c2s_CmdDebug(8903, 73125);
}
+ private void OnBtnAddWrathClicked()
+ {
+ UnityGameSession.c2s_CmdDebug(1992);
+ }
+ //1992
#endregion
+
+ [ContextMenu("Toggle Auto-Add Wrath")]
+ public void OnBtnToggleAutoWrathClicked()
+ {
+ ToggleAutoAddWrath();
+ }
+
+ ///
+ /// Toggle auto-add wrath feature (calls OnBtnAddWrathClicked every 3 seconds)
+ /// 切换自动添加怒气功能(每3秒调用OnBtnAddWrathClicked)
+ ///
+ public void ToggleAutoAddWrath()
+ {
+ _isAutoAddWrathEnabled = !_isAutoAddWrathEnabled;
+
+ if (_isAutoAddWrathEnabled)
+ {
+ // Start the coroutine if not already running
+ // 如果尚未运行,则启动协程
+ if (_autoAddWrathCoroutine == null)
+ {
+ _autoAddWrathCoroutine = StartCoroutine(AutoAddWrathCoroutine());
+ }
+ }
+ else
+ {
+ // Stop the coroutine if running
+ // 如果正在运行,则停止协程
+ if (_autoAddWrathCoroutine != null)
+ {
+ StopCoroutine(_autoAddWrathCoroutine);
+ _autoAddWrathCoroutine = null;
+ }
+ }
+ }
+
+ ///
+ /// Coroutine that calls OnBtnAddWrathClicked every 3 seconds
+ /// 每3秒调用OnBtnAddWrathClicked的协程
+ ///
+ private IEnumerator AutoAddWrathCoroutine()
+ {
+ while (_isAutoAddWrathEnabled)
+ {
+ OnBtnAddWrathClicked();
+ yield return new WaitForSeconds(3.0f);
+ }
+ _autoAddWrathCoroutine = null;
+ }
}
}
diff --git a/Assets/PerfectWorld/Scripts/DebugCommandMenu/Editor.meta b/Assets/PerfectWorld/Scripts/DebugCommandMenu/Editor.meta
new file mode 100644
index 0000000000..e161d6892c
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/DebugCommandMenu/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 14a56e4ae79b92747a7e7d9361f3cbb7
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/PerfectWorld/Scripts/DebugCommandMenu/TestButtonAttribute.cs b/Assets/PerfectWorld/Scripts/DebugCommandMenu/TestButtonAttribute.cs
new file mode 100644
index 0000000000..49b88f57dd
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/DebugCommandMenu/TestButtonAttribute.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using EditorAttributes;
+
+namespace BrewMonster.Scripts
+{
+ public class TestButtonAttribute : MonoBehaviour
+ {
+ [Button("Test Button")]
+ public void TestMethod()
+ {
+ Debug.Log("Test button clicked!");
+ }
+ }
+}
diff --git a/Assets/PerfectWorld/Scripts/DebugCommandMenu/TestButtonAttribute.cs.meta b/Assets/PerfectWorld/Scripts/DebugCommandMenu/TestButtonAttribute.cs.meta
new file mode 100644
index 0000000000..d17733a0df
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/DebugCommandMenu/TestButtonAttribute.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 1354ffe4a2a98bf4babd611fa7f66452
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Managers/A3DSkillGfxMan.cs b/Assets/PerfectWorld/Scripts/Managers/A3DSkillGfxMan.cs
index 85239409ae..cc007aae1c 100644
--- a/Assets/PerfectWorld/Scripts/Managers/A3DSkillGfxMan.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/A3DSkillGfxMan.cs
@@ -104,6 +104,10 @@ namespace BrewMonster
return bRet;
}
+ public virtual void Dispose() {
+ Instance = null;
+ }
+
public bool AddOneSkillGfxEvent(
A3DSkillGfxComposer pComposer,
long nHostID,
diff --git a/Assets/PerfectWorld/Scripts/Managers/CECAttacksMan.cs b/Assets/PerfectWorld/Scripts/Managers/CECAttacksMan.cs
index 6d782078be..ac73438c18 100644
--- a/Assets/PerfectWorld/Scripts/Managers/CECAttacksMan.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/CECAttacksMan.cs
@@ -11,7 +11,7 @@ using System.Text;
using ModelRenderer.Scripts.Common;
using BrewMonster.Scripts;
using UnityEngine;
- using Cysharp.Threading.Tasks;
+using Cysharp.Threading.Tasks;
namespace BrewMonster
{
@@ -30,7 +30,7 @@ namespace BrewMonster
protected override void OnDestroy()
{
m_targets = null;
- SkillGfxMan.InstanceSub = null;
+ SkillGfxMan.InstanceSub.Dispose();
base.OnDestroy();
}
private void Start()
@@ -52,7 +52,7 @@ namespace BrewMonster
LoadAllSkillGfxAsync();
}
-
+
///
/// Load GFX for a specific skill on-demand (async, non-blocking)
/// Call this when a skill is about to be used for the first time
@@ -62,7 +62,7 @@ namespace BrewMonster
// Check if already loaded
if (m_pSkillGfxComposerMan.GetSkillGfxComposer((int)skillId) != null)
return; // Already loaded
-
+
// Get SkillStub instance / 获取技能存根实例
SkillStub skillStub = SkillStub.GetStub(skillId);
if (skillStub == null)
@@ -70,9 +70,9 @@ namespace BrewMonster
BMLogger.LogWarning($"CECAttacksMan::LoadSkillGfxOnDemand() - SkillStub not found for skill {skillId}");
return;
}
-
+
(string flyGFXPath, string hitGrdGFXPath, string hitGFXPath) = ElementSkill.GetAllGFX(skillId);
-
+
// Pass skillStub to LoadOneComposerAsync / 将技能存根传递给LoadOneComposerAsync
bool loaded = await m_pSkillGfxComposerMan.LoadOneComposerAsync((int)skillId, skillStub, flyGFXPath, hitGrdGFXPath, hitGFXPath);
if (!loaded)
@@ -80,18 +80,18 @@ namespace BrewMonster
BMLogger.LogWarning($"CECAttacksMan::LoadSkillGfxOnDemand() - Failed to load GFX for skill {skillId}");
}
}
-
+
public async void LoadAllSkillGfxAsync()
{
uint idSkill = 0;
-
+
var skillMap = SkillStub.GetMap();
if (skillMap == null || skillMap.Count == 0)
{
BMLogger.LogWarning("CECAttacksMan::LoadAllSkillGfxAsync() - Skill map is empty");
return;
}
-
+
BMLogger.Log($"CECAttacksMan::LoadAllSkillGfxAsync() - Loading GFX for {skillMap.Count} skills...");
int loadedCount = 0;
int failedCount = 0;
@@ -120,14 +120,14 @@ namespace BrewMonster
loadedCount++;
else
failedCount++;
-
+
// Yield every 10 skills to keep Unity responsive
if ((loadedCount + failedCount) % 10 == 0)
{
await UniTask.Yield();
}
}
-
+
BMLogger.Log($"CECAttacksMan::LoadAllSkillGfxAsync() - Complete. Loaded: {loadedCount}, Failed: {failedCount}");
//TODO: convert this part
/* char szMultiSectionFile[MAX_PATH] = { 0 };
@@ -164,7 +164,8 @@ namespace BrewMonster
//BMLogger.LogError("HoangDev: Update CECAttackEvent node.Value.m_bFinished: " + node.Value.m_bFinished);
if (node.Value.m_bFinished)
m_targets.Remove(node);
- else {
+ else
+ {
node.Value.Tick(dwDeltaTime);
}
node = next;
@@ -185,7 +186,7 @@ namespace BrewMonster
// Always draw gizmos (not just when selected)
// 始终绘制辅助线(不仅在选择时)
int gizmoCount = SkillGfxGizmoDrawer.GetGizmoCount();
-
+
// Draw test gizmo at origin to verify OnDrawGizmos is working
// 在原点绘制测试辅助线以验证OnDrawGizmos是否工作
if (gizmoCount == 0 && Time.frameCount % 120 == 0) // Log every 2 seconds when no gizmos
@@ -195,7 +196,7 @@ namespace BrewMonster
Gizmos.color = Color.magenta;
Gizmos.DrawWireSphere(Vector3.zero, 1.0f);
}
-
+
if (gizmoCount > 0)
{
// Only log occasionally to avoid spam
@@ -207,7 +208,7 @@ namespace BrewMonster
}
SkillGfxGizmoDrawer.DrawGizmos();
}
-
+
///
/// Draw gizmos when selected (for debugging)
/// 选择时绘制辅助线(用于调试)
@@ -551,27 +552,41 @@ namespace BrewMonster
/// Load composer from file
/// 从文件加载组合器
///
-// #if UNITY_EDITOR
- string hitGfxName;
- string flyGfxName;
- string hitGrdGfxName;
-// #endif
+#if UNITY_EDITOR
+ public string hitGfxName;
+ public string flyGfxName;
+ public string hitGrdGfxName;
+#endif
public async UniTask Load(SkillStub skillStub, string flyGFXPath, string hitGrdGFXPath, string hitGFXPath)
{
+
+#if UNITY_EDITOR
flyGfxName = flyGFXPath;
hitGfxName = hitGFXPath;
hitGrdGfxName = hitGrdGFXPath;
-
+#else
+ string flyGfxName = flyGFXPath;
+ string hitGfxName = hitGFXPath;
+ string hitGrdGfxName = hitGrdGFXPath;
+#endif
// Load GFX prefabs / 加载GFX预制体
flyGFX = string.IsNullOrEmpty(flyGfxName) ? null : await AddressableManager.Instance.LoadPrefabAsync("gfx/" + flyGfxName);
hitGFX = string.IsNullOrEmpty(hitGfxName) ? null : await AddressableManager.Instance.LoadPrefabAsync("gfx/" + hitGfxName);
hitGrdGFX = string.IsNullOrEmpty(hitGrdGfxName) ? null : await AddressableManager.Instance.LoadPrefabAsync("gfx/" + hitGrdGfxName);
-
+
//BMLogger.LogError("HoangDev: Load A3DSkillGfxComposer GFX name: " + name);
if (flyGFX == null && !string.IsNullOrEmpty(flyGfxName))
{
flyGFX = Resources.Load("GFX/" + "PlaceHolder");
}
+ if (hitGFX == null && !string.IsNullOrEmpty(hitGfxName))
+ {
+ hitGFX = Resources.Load("GFX/" + "PlaceHolder");
+ }
+ if (hitGrdGFX == null && !string.IsNullOrEmpty(hitGrdGfxName))
+ {
+ hitGrdGFX = Resources.Load("GFX/" + "PlaceHolder");
+ }
// Read parameters from SkillStub / 从技能存根读取参数
if (skillStub != null)
@@ -582,26 +597,26 @@ namespace BrewMonster
m_AttHitMode = skillStub.m_AttHitMode;
m_dwFlyTime = skillStub.m_dwFlyTime;
m_bTraceTarget = skillStub.m_bTraceTarget;
-
+
// Clustering / 集群
m_FlyCluster.m_ulCount = skillStub.m_FlyClusterCount;
m_FlyCluster.m_dwInterv = skillStub.m_FlyClusterInterval;
m_HitCluster.m_ulCount = skillStub.m_HitClusterCount;
m_HitCluster.m_dwInterv = skillStub.m_HitClusterInterval;
-
+
// Behavior / 行为
m_bOneHit = skillStub.m_bOneHit;
m_bFadeOut = skillStub.m_bFadeOut;
m_bRelScl = skillStub.m_bRelScl;
m_fDefTarScl = skillStub.m_fDefTarScl;
-
+
// Area / 区域
- /* m_param.m_bArea = skillStub.m_bArea;
- m_param.m_Shape = skillStub.m_Shape;
- m_param.m_vSize = skillStub.m_vSize;
-
- // Param value / 参数值
- m_param.value = skillStub.m_param.value;*/
+ /* m_param.m_bArea = skillStub.m_bArea;
+ m_param.m_Shape = skillStub.m_Shape;
+ m_param.m_vSize = skillStub.m_vSize;
+
+ // Param value / 参数值
+ m_param.value = skillStub.m_param.value;*/
}
else
{
@@ -676,7 +691,7 @@ namespace BrewMonster
int originalCount = targets.Count;
targets = validTargets;
-
+
for (int i = 0; i < targets.Count; i++)
{
var tar = targets[i];
@@ -776,10 +791,10 @@ namespace BrewMonster
}
// 计算缩放 / Calculate scale
- /* if (m_bRelScl)
- fScale = SkillGfxMan.InstanceSub.GetTargetScale(_Target) / m_fDefTarScl * m_fHitGfxScale;
- else
- fScale = m_fHitGfxScale;*/
+ /* if (m_bRelScl)
+ fScale = SkillGfxMan.InstanceSub.GetTargetScale(_Target) / m_fDefTarScl * m_fHitGfxScale;
+ else
+ fScale = m_fHitGfxScale;*/
// 根据目标类型决定是否显示特效 / Determine whether to show effects based on target type
if ((nCastTargetID != 0 && tar.idTarget != nCastTargetID)
@@ -865,9 +880,8 @@ public class CECAttackEvent
m_timeToBeFired = (uint)nTimeToBeFired;
m_timeToDoDamage = (uint)nTimeToDoDamage;
m_bFinished = false;
-#if UNITY_EDITOR
- debugCounter = UnityEngine.Random.Range(0, 1000);
-#endif
+ debugCounter = UnityEngine.Random.Range(0, 1000);
+
AddTarget(idTarget, dwModifier, nDamage);
}
public bool Tick(uint dwDeltaTime)
@@ -1498,3 +1512,8 @@ public enum GfxSkillValType
enumGfxSkillFloat,
enumGfxSkillValTypeNum
};
+
+
+
+
+
diff --git a/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs b/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs
index da872c1e90..948d9bb4d0 100644
--- a/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/CECNPCMan.cs
@@ -9,7 +9,6 @@ using System.Buffers.Binary;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using BrewMonster.Network;
-using Unity.VisualScripting;
using UnityEngine;
public class CECNPCMan : IMsgHandler
diff --git a/Assets/PerfectWorld/Scripts/Managers/CECSkillGfxMan.cs b/Assets/PerfectWorld/Scripts/Managers/CECSkillGfxMan.cs
index ef6f3081ae..73eddd8d37 100644
--- a/Assets/PerfectWorld/Scripts/Managers/CECSkillGfxMan.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/CECSkillGfxMan.cs
@@ -420,13 +420,6 @@ namespace BrewMonster
m_pHitGfx = pHitGfx;
}*/
- // ===== Helper functions (static) =====
- // 辅助函数(静态)
-
- ///
- /// Get position by ID (player or NPC)
- /// 根据ID获取位置(玩家或NPC)
- ///
private static bool get_pos_by_id(
EC_ManPlayer pPlayerMan,
CECNPCMan pNPCMan,
@@ -531,7 +524,6 @@ namespace BrewMonster
/*A3DSkeletonHook* pHook = pNPC->GetSgcHook(szHanger, bChildHook, szHook);
if (!pHook)
break;
-
A3DSkinModel *pSkin = pNPC->GetSgcSkinModel(szHanger, bChildHook, szHook);
if (bRelHook)
vPos = pHook->GetAbsoluteTM() * pOffset;
@@ -540,7 +532,6 @@ namespace BrewMonster
vPos = pSkin->GetAbsoluteTM() * pOffset;
vPos = vPos - pSkin->GetAbsoluteTM().GetRow(3) + pHook->GetAbsoluteTM().GetRow(3);
}
-
return true;*/
break;
}
@@ -611,14 +602,9 @@ namespace BrewMonster
return true;
}
}
-
return false;
}
- ///
- /// Get scale by ID (height from AABB)
- /// 根据ID获取缩放(从AABB获取高度)
- ///
public static float _get_scale_by_id(
EC_ManPlayer pPlayerMan,
CECNPCMan pNPCMan,
@@ -747,7 +733,11 @@ namespace BrewMonster
m_pNPCMan = EC_ManMessageMono.Instance?.CECNPCMan;
}
-
+ public override void Dispose()
+ {
+ base.Dispose();
+ InstanceSub = null;
+ }
public A3DSkillGfxEvent GetEmptyEvent(GfxMoveMode mode)
{
int modeIndex = (int)mode;
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs
index 06dd6f42ff..7b071317ce 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkMove.cs
@@ -1268,7 +1268,18 @@ namespace BrewMonster.Scripts
{
if (m_pHost.IsFlying())
{
- break;
+ if (CECUIManager.Instance != null)
+ {
+ string message = $"Please deactive the fly mode to start the path finding.";
+
+ CECUIManager.Instance.ShowMessageBox(
+ "Fly Mode", // 飞行模式
+ message, // 消息
+ BrewMonster.MessageBoxType.YesButton
+ );
+ Finish();
+ return;
+ }
}
// Brush test is not fully ported yet; pass null for now (static movemap only).
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs
index 26b153b95d..7e3171f17a 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkSpell.cs
@@ -1,5 +1,4 @@
using CSNetwork.GPDataType;
-using Unity.VisualScripting;
using UnityEngine;
using static BrewMonster.Scripts.CECHPWorkSpell.Spell_magic_state;
namespace BrewMonster.Scripts
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs
index fdd5b8c8f9..7ca4f5100d 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HPWorkTrace.cs
@@ -6,7 +6,6 @@ using CSNetwork.GPDataType;
using System;
using System.Runtime.ConstrainedExecution;
using PerfectWorld.Scripts;
-using Unity.VisualScripting;
using UnityEngine;
///////////////////////////////////////////////////////////////////////////
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_HostInputFilter.cs b/Assets/PerfectWorld/Scripts/Managers/EC_HostInputFilter.cs
index c2b5f9f05b..71d66218eb 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_HostInputFilter.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_HostInputFilter.cs
@@ -60,7 +60,6 @@ namespace BrewMonster
}
if (Input.GetKeyDown(KeyCode.H))
{
- BMLogger.LogError("Input.GetKeyDown(KeyCode.H)");
CycleSkillShortcuts();
}
#endif
@@ -69,10 +68,11 @@ namespace BrewMonster
void OnMsgRBtnClick()
{
- int id = m_idSelTarget;
- if (id == 0 || id == GetCharacterID() || !GPDataTypeHelper.ISPLAYERID(id))
- return;
- CECUIManager.Instance?.ShowPlayerOptionsDialog(id);
+ // already moved this to OnNPCIconBtnClick in HUDNPC.cs because mobile platform doesn't support right click.
+ // int id = m_idSelTarget;
+ // if (id == 0 || id == GetCharacterID() || !GPDataTypeHelper.ISPLAYERID(id))
+ // return;
+ // CECUIManager.Instance?.ShowPlayerOptionsDialog(id);
}
public void OnCommandSummon(int slot)
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_Inventory.cs b/Assets/PerfectWorld/Scripts/Managers/EC_Inventory.cs
index 93f3700dce..5e020ab927 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_Inventory.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_Inventory.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using Unity.VisualScripting;
using UnityEngine;
namespace BrewMonster.Scripts.Managers
@@ -129,6 +128,42 @@ namespace BrewMonster.Scripts.Managers
m_aItems[iSlot2] = tmp;
}
+ ///
+ /// Place or stack item in a specific slot (server-specified slot). Matches C++ expectation that client uses same slot as server.
+ ///
+ public bool PutItemInSlot(int iSlot, int tid, int iExpireDate, int iAmount, out int piLastSlot, out int piLastAmount)
+ {
+ piLastSlot = -1;
+ piLastAmount = 0;
+ if (iSlot < 0 || iSlot >= m_aItems.Length || iAmount <= 0)
+ return false;
+
+ var slotItem = m_aItems[iSlot];
+ if (slotItem == null)
+ {
+ var newItem = EC_IvtrItem.CreateItem(tid, iExpireDate, iAmount);
+ if (newItem == null)
+ return false;
+ newItem.Slot = iSlot;
+ newItem.SetCount(iAmount);
+ m_aItems[iSlot] = newItem;
+ piLastSlot = iSlot;
+ piLastAmount = iAmount;
+ return true;
+ }
+ if (slotItem.GetTemplateID() != tid)
+ return false;
+ int pileLimit = Math.Max(1, EC_IvtrItem.GetPileLimit(tid));
+ int canAdd = Math.Max(0, pileLimit - Math.Max(0, slotItem.GetCount()));
+ if (canAdd <= 0)
+ return false;
+ int add = Math.Min(canAdd, iAmount);
+ slotItem.AddAmount(add);
+ piLastSlot = iSlot;
+ piLastAmount = slotItem.GetCount();
+ return true;
+ }
+
public bool MergeItem(int tid, int iExpireDate, int iAmount, out int piLastSlot, out int piLastAmount)
{
piLastSlot = -1;
@@ -170,6 +205,9 @@ namespace BrewMonster.Scripts.Managers
return false;
}
var newItem = EC_IvtrItem.CreateItem(tid, iExpireDate, iAmount);
+ if (newItem == null)
+ return false;
+ newItem.Slot = firstEmpty;
newItem.SetCount(iAmount);
m_aItems[firstEmpty] = newItem;
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs
index bba85771e0..4c847e228d 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_InventoryUI.cs
@@ -18,7 +18,7 @@ using UnityEngine.UI;
namespace BrewMonster.Scripts.Managers
{
- public class EC_InventoryUI : AUIDialog, IRefreshLayout
+ public class EC_InventoryUI : AUIDialog
{
[Header("Pack Buttons (assign in Inspector)")]
@@ -30,9 +30,7 @@ namespace BrewMonster.Scripts.Managers
[SerializeField] private ItemInfo detailPanelRoot;
[SerializeField] private Vector2 detailPanelOffset = new Vector2(20f, 0f);
[SerializeField] private bool hideDetailOnStart = true;
- [SerializeField] private EC_UIUtility.TextOutlet nameText;
[SerializeField] private EC_UIUtility.TextOutlet descriptionText;
- [SerializeField] private EC_UIUtility.TextOutlet extendedDescText;
[SerializeField] private Button equipButton;
[SerializeField] private Button dropButton;
@@ -1023,8 +1021,6 @@ namespace BrewMonster.Scripts.Managers
// Get user-friendly name
string itemName = EC_IvtrItemUtils.Instance.ResolveItemName(item.m_tid);
- nameText?.Set(string.IsNullOrEmpty(itemName) ? $"Item {item.m_tid}" : itemName);
-
// Centralised description:
// - For equipment, prefer EC_IvtrEquip description (includes stats, addons, sockets, etc.)
// - For other items, use EC_IvtrItem.GetDesc which reads from string tables.
@@ -1063,6 +1059,7 @@ namespace BrewMonster.Scripts.Managers
// Show panel first
// 先显示面板
ShowDetailPanel(true);
+ //Refresh the position of the description text. Used for UI logic purpose.
descriptionText.tmp.gameObject.GetComponent()?.RefreshLayout();
}
@@ -1286,16 +1283,6 @@ namespace BrewMonster.Scripts.Managers
draggedItemSourceSlot = -1;
draggedItemSourcePackage = 0;
}
- public void RefreshLayout()
- {
- var rectTransform = GetComponent();
- if (rectTransform == null)
- {
- return;
- }
- rectTransform.ForceUpdateRectTransforms();
- LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
- }
}
}
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs
index c90d41ef89..1ee7462d39 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrEquip.cs
@@ -14,9 +14,6 @@ using System.Text.RegularExpressions;
using System.Reflection;
using BrewMonster.Scripts.Managers;
using BrewMonster.Scripts;
-using UnityEngine.AddressableAssets;
-using CSNetwork.Protocols;
-using Unity.VisualScripting;
namespace PerfectWorld.Scripts.Managers
{
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrItem.cs b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrItem.cs
index 1a747fd600..cdbb45d447 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrItem.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrItem/EC_IvtrItem.cs
@@ -703,7 +703,6 @@ namespace BrewMonster.Scripts.Managers
public string m_strDesc = ""; // Item description
public bool m_bIsInNPCPack; // true, this item is in NPC package
public bool m_bLocalDetailData; // true, data from GetDetailDataFromLocal
- public int m_iCurEndurance; // Current endurance
public EC_Inventory m_pDescIvtr; // Inventory only used to get item description
@@ -739,7 +738,6 @@ namespace BrewMonster.Scripts.Managers
m_bIsInNPCPack = false;
m_bLocalDetailData = false;
m_pDescIvtr = null;
- m_iCurEndurance = 0;
}
@@ -1274,7 +1272,6 @@ namespace BrewMonster.Scripts.Managers
#endregion
#region Simple property-style accessors (1:1 with C++)
- public int GetCurEndurance() { return m_iCurEndurance; }
public int GetClassID() => m_iCID;
public int GetTemplateID() => m_tid;
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs
index f387e0a2ca..707a76639d 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs
@@ -33,18 +33,6 @@ namespace PerfectWorld.Scripts.Managers
{
if (CECGameRun.Instance == null) return true;
if (CECGameRun.Instance.GetHostPlayer() == null) return true;
- // Duel invite: show accept/reject popup (origin uses MSG_PM_DUELOPT with command DUEL_RECV_REQUEST = 214)
- // dwParam2 is ushort (pCmdHeader from GameSession); use Convert to avoid InvalidCastException when unboxing
- if ((int)Msg.dwMsg == EC_MsgDef.MSG_PM_DUELOPT && Convert.ToInt32(Msg.dwParam2) == CommandID.DUEL_RECV_REQUEST && Msg.dwParam1 is byte[] pDataBuf && pDataBuf.Length >= 4)
- {
- int inviterId = BitConverter.ToInt32(pDataBuf, 0);
- CECUIManager.Instance?.ShowMessageBox(
- title: "",
- message: "You have received a duel request. Do you accept?",
- messageBoxType: MessageBoxType.BothYesNoButton,
- onClickedYes: () => UnityGameSession.c2s_CmdDuelReply(true, inviterId),
- onClickedNo: () => UnityGameSession.c2s_CmdDuelReply(false, inviterId));
- }
CECGameRun.Instance.GetHostPlayer().ProcessMessage(Msg);
}
else if (Msg.iSubID < 0)
diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs b/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs
index dcc3742654..8857340faa 100644
--- a/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs
+++ b/Assets/PerfectWorld/Scripts/Managers/EC_Skill.cs
@@ -104,14 +104,14 @@ namespace BrewMonster
}
private ElementSkill m_pSkillCore;
- private int m_idSkill;
- private int m_iLevel;
- private int m_iCoolCnt;
- private int m_iCoolTime;
- private bool m_bCooling;
- private int m_iChargeCnt;
- private int m_iChargeMax;
- private bool m_bCharging;
+ private int m_idSkill;
+ private int m_iLevel;
+ private int m_iCoolCnt;
+ private int m_iCoolTime;
+ private bool m_bCooling;
+ private int m_iChargeCnt;
+ private int m_iChargeMax;
+ private bool m_bCharging;
private static CECSkillStr l_SkillStr = new CECSkillStr();
@@ -196,6 +196,7 @@ namespace BrewMonster
m_iCoolCnt = iStartCnt;
m_bCooling = true;
}
+ public bool ValidWeapon(int idWeapon) { return m_pSkillCore.ValidWeapon(idWeapon); }
// Ready to be cast ?
public bool ReadyToCast()
@@ -290,10 +291,10 @@ namespace BrewMonster
return null;
StringBuilder sb = new StringBuilder(1024);
- m_pSkillCore.GetIntroduction(sb, l_SkillStr);
+ m_pSkillCore.GetIntroduction(sb, l_SkillStr);
return sb;
}
- public static StringBuilder GetDesc(int idSkill, int iLevel, StringBuilder szText, int iBufLen)
+ public static StringBuilder GetDesc(int idSkill, int iLevel, StringBuilder szText, int iBufLen)
{
if (szText == null || iBufLen == 0)
return null;
@@ -367,10 +368,6 @@ namespace BrewMonster
return m_pSkillCore != null ? m_pSkillCore.GetNativeName() ?? string.Empty : string.Empty;
}*/
- public bool ValidWeapon(int idWeapon)
- {
- return m_pSkillCore != null && m_pSkillCore.ValidWeapon(idWeapon);
- }
/*
public bool ValidShape(int iShape)
{
diff --git a/Assets/PerfectWorld/Scripts/ModelFiles/CECTaoistRank.cs b/Assets/PerfectWorld/Scripts/ModelFiles/CECTaoistRank.cs
index 0ecaca5d44..ae799e4970 100644
--- a/Assets/PerfectWorld/Scripts/ModelFiles/CECTaoistRank.cs
+++ b/Assets/PerfectWorld/Scripts/ModelFiles/CECTaoistRank.cs
@@ -1,4 +1,3 @@
-using Unity.VisualScripting;
using UnityEngine;
namespace BrewMonster
diff --git a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs
index 2fc72a6358..e7111f217c 100644
--- a/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs
+++ b/Assets/PerfectWorld/Scripts/Move/CECPlayer.cs
@@ -1,26 +1,17 @@
-using Animancer;
-using BrewMonster;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.PerfectWorld.Scripts.Vfx;
using BrewMonster.Scripts;
-using BrewMonster.Scripts;
using BrewMonster.Scripts.Managers;
using BrewMonster.Scripts.Skills;
using CSNetwork.GPDataType;
using ModelRenderer.Scripts.GameData;
-using PerfectWorld.Scripts.Managers;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
-using System.Xml.Linq;
using TMPro;
-using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SceneManagement;
-using UnityEngine.UIElements;
-using static BrewMonster.CECPlayer;
-using BrewMonster.Network;
using System.Runtime.InteropServices;
using PerfectWorld.Scripts.Managers.BrewMonster.Managers;
using CSNetwork;
diff --git a/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs b/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs
index fb1bbc6b59..af051e4245 100644
--- a/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs
+++ b/Assets/PerfectWorld/Scripts/NPC/CECMonster.cs
@@ -4,9 +4,6 @@ using ModelRenderer.Scripts.GameData;
using System;
using System.Runtime.InteropServices;
using System.Text;
-using Unity.VisualScripting;
-using UnityEngine;
-using static CECNPC;
public class CECMonster : CECNPC
{
diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommandFactory.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommandFactory.cs
index b4e93c6fac..6082666510 100644
--- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommandFactory.cs
+++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/C2SCommand/C2SCommandFactory.cs
@@ -818,6 +818,18 @@ namespace CSNetwork.C2SCommand
return SerializeCommand(CommandID.TEAM_INVITE, new cmd_team_new_member { idMember = idPlayer });
}
+ /// C2S: accept team invite from leader. idLeader = who sent the invite, team_seq = invite sequence from TEAM_LEADER_INVITE.
+ public static Octets CreateTeamAgreeInviteCommand(int idLeader, int team_seq)
+ {
+ return SerializeCommand(CommandID.TEAM_AGREE_INVITE, new cmd_team_agree_invite { idLeader = idLeader, team_seq = team_seq });
+ }
+
+ /// C2S: reject team invite from leader.
+ public static Octets CreateTeamRejectInviteCommand(int idLeader)
+ {
+ return SerializeCommand(CommandID.TEAM_REJECT_INVITE, new cmd_team_reject_invite { idLeader = idLeader });
+ }
+
/// C2S: request duel with target player (same payload shape as team invite).
public static Octets CreateDuelRequestCommand(int idTarget)
{
diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs
index a2f2c05aea..67ca8d2495 100644
--- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs
+++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GPDataType.cs
@@ -1315,6 +1315,26 @@ namespace CSNetwork.GPDataType
public byte bySlot;
}
+ /// One item in cmd_purchase_item (buy from NPC/booth). Wire: item_id, expire_date, count, inv_index, booth_slot = 15 bytes.
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct cmd_purchase_item_ITEM
+ {
+ public int item_id;
+ public int expire_date;
+ public uint count;
+ public ushort inv_index;
+ public byte booth_slot;
+ }
+
+ /// Fixed header of cmd_purchase_item. Rest of packet is item_count x cmd_purchase_item_ITEM.
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct cmd_purchase_item_header
+ {
+ public uint cost;
+ public uint yinpiao;
+ public byte flag;
+ public ushort item_count;
+ }
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_get_own_money
@@ -1394,7 +1414,7 @@ namespace CSNetwork.GPDataType
public byte index;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct cmd_pickup_item
+ public struct cmd_pickup_item
{
public int tid;
public int expire_date;
@@ -2188,6 +2208,21 @@ namespace CSNetwork.GPDataType
public int idMember;
}
+ /// C2S: accept team invite. idLeader = who sent the invite, team_seq = invite sequence.
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct cmd_team_agree_invite
+ {
+ public int idLeader;
+ public int team_seq;
+ }
+
+ /// C2S: reject team invite. idLeader = who sent the invite.
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ public struct cmd_team_reject_invite
+ {
+ public int idLeader;
+ }
+
/// C2S duel reply (origin: who = inviter id, param = 0 accept / non-zero reject reason).
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_duel_reply
diff --git a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
index dc0a3ac586..073a93dabf 100644
--- a/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
+++ b/Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
@@ -1,2043 +1,2084 @@
-using BrewMonster;
-using BrewMonster.Common;
-using BrewMonster.Managers;
-using BrewMonster.Network;
-using BrewMonster.Scripts.Skills;
-using BrewMonster.UI;
-using CSNetwork.C2SCommand;
-using CSNetwork.GPDataType;
-using CSNetwork.Protocols;
-using CSNetwork.Protocols.RPCData;
-using System;
-using System.Collections.Generic;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using UnityEngine;
-using CommandID = CSNetwork.GPDataType.CommandID;
-
-namespace CSNetwork
-{
- public class GameSession : IDisposable
- {
- private static IPrefixedLogger
- _logger = LoggerFactory.GetLogger(nameof(GameSession)); // Get class-specific logger
-
- private NetworkManager _networkManager;
- private string _host;
- private int _port;
- private string _username;
- private string _password;
- private int _currentUserId = -1; // To store the UserID after successful login
- private uint _localsid = 0; // To store the LocalSID from onlineannounce
- private int m_iCharID;
- private int m_idLastSelTarget = 0; // ID of selected item last time
-
- CECStringTab m_ErrorMsgs;
-
- // State management for async operations and callbacks
- private Action _loginCallback;
- private Action> _roleListCallback;
- private List _accumulatedRoles;
- private Action _selectRoleCallback;
- private Action _createRoleCallback;
- private RoleInfo _selectedRole;
- public bool IsConnected => _networkManager?.IsConnected ?? false;
- public static SynchronizationContext Context;
- private CECC2SCmdCache m_CmdCache; // C2S command cache
-
- /// Raised when server sends PROTOCOL_PLAYERLOGOUT(69).
- public event Action PlayerLogoutReceived;
-
- /// Raised when the underlying network disconnects.
- public event Action Disconnected;
-
- private static void PostToUnityContext(Action action)
- {
- if (action == null) return;
- var ctx = Context;
- if (ctx != null)
- {
- ctx.Post(_ => action(), null);
- }
- else
- {
- action();
- }
- }
-#if UNITY_EDITOR
- public bool isDebug;
- public bool IsDebug
- {
- get => isDebug;
- set => isDebug = value;
- }
-#endif
- public CECC2SCmdCache CmdCache { get => m_CmdCache; }
-
-
- public GameSession()
- {
- _networkManager = new NetworkManager();
- m_CmdCache = new CECC2SCmdCache();
- _networkManager.ProtocolReceived += OnProtocolReceived;
- _networkManager.ErrorOccurred += OnErrorOccurred;
- _networkManager.Disconnected += OnDisconnected;
- }
-
- public void SetLogPath(string path)
- {
- LoggerFactory.SetFileLoggerImplementation(new FileLogger());
- _logger = LoggerFactory.GetCustomLogger(path, nameof(GameSession) + GetHashCode(), LoggerType.File);
- _networkManager.SetLogPath(path);
- }
-
- ///
- /// Connects to the game server asynchronously.
- ///
- /// Server hostname or IP address.
- /// Server port.
- /// Task representing the asynchronous connect operation. Check IsConnected property or handle Disconnected event for status.
- public async Task ConnectAsync(string host, int port)
- {
- if (IsConnected)
- {
- _logger.Log(LogType.Warning, "ConnectAsync called but already connected.");
- return;
- }
-
- _host = host;
- _port = port;
- _logger.Log(LogType.Info, $"Attempting to connect to {_host}:{_port}...");
- try
- {
- await _networkManager.ConnectAsync(_host, _port);
- if (IsConnected)
- {
- _logger.Log(LogType.Info, "Connection established.");
- }
- else
- {
- _logger.Log(LogType.Warning,
- "Connection failed after ConnectAsync completed (check NetworkManager logs/events).");
- }
- }
- catch (Exception ex)
- {
- _logger.Log(LogType.Error, $"Connection exception: {ex.Message}");
- _logger.LogException(ex);
- OnDisconnected();
- }
- }
-
-
- public void Disconnect()
- {
- _networkManager.Disconnect();
- }
-
- ///
- /// Initiates the login process asynchronously.
- ///
- /// Account username.
- /// Account password.
- /// Action invoked with true on successful login (OnlineAnnounce received), false otherwise.
- public void LoginAsync(string username, string password, Action callback)
- {
- if (!IsConnected)
- {
- _logger.Log(LogType.Warning, "LoginAsync called but not connected.");
- callback?.Invoke(false);
- return;
- }
-
- if (_loginCallback != null)
- {
- _logger.Log(LogType.Warning, "LoginAsync called while another login is already in progress.");
- callback?.Invoke(false);
- return;
- }
-
- _username = username;
- _password = password;
- _loginCallback = callback;
- _currentUserId = -1; // Reset user ID
-
- _logger.Log(LogType.Info, $"Initiating login for user '{_username}'...");
- }
-
- ///
- /// Initiates fetching the role list asynchronously. Requires successful login.
- ///
- /// Action invoked with the complete list of roles, or null/empty list on failure.
- public void GetRoleListAsync(Action> callback)
- {
- if (!IsConnected)
- {
- _logger.Log(LogType.Warning, "GetRoleListAsync called but not connected.");
- callback?.Invoke(null);
- return;
- }
-
- if (_currentUserId == -1)
- {
- _logger.Log(LogType.Warning, "GetRoleListAsync called but not logged in.");
- callback?.Invoke(null);
- return;
- }
-
- if (_roleListCallback != null)
- {
- _logger.Log(LogType.Warning,
- "GetRoleListAsync called while another role list retrieval is already in progress.");
- callback?.Invoke(null);
- return;
- }
-
- _roleListCallback = callback;
- _accumulatedRoles = new List();
- _logger.Log(LogType.Info, "Requesting role list...");
- RequestRoleListInternal();
- }
-
- public RoleInfo GetRoleInfo()
- {
- return _selectedRole;
- }
-
- public void SelectRoleAsync(RoleInfo role, Action callback)
- {
- _selectedRole = role;
- _selectRoleCallback = callback;
- SetCharacterID(role.roleid);
- SendProtocol(new selectrole()
- {
- Roleid = role.roleid,
- Flag = 0
- });
- }
-
- public void CreateRoleAsync(RoleInfo roleInfo, Octets referId, Action callback)
- {
- if (!IsConnected)
- {
- callback?.Invoke(null);
- return;
- }
-
- if (_currentUserId == -1)
- {
- callback?.Invoke(null);
- return;
- }
-
- if (_createRoleCallback != null)
- {
- callback?.Invoke(null);
- return;
- }
-
- _createRoleCallback = callback;
-
- createrole createRoleProtocol = new createrole()
- {
- Userid = _currentUserId,
- Localsid = _localsid,
- Roleinfo = roleInfo,
- Referid = referId ?? new Octets()
- };
-
- Debug.Log($"[GameSession] Creating role - UserID: {_currentUserId}, Localsid: {_localsid}, Profession: {roleInfo.occupation}, Gender: {roleInfo.gender}");
- Debug.Log($"[GameSession] RoleInfo details - Name size: {roleInfo.name?.Size ?? 0}, Equipment count: {roleInfo.equipment?.Count ?? 0}, Custom data size: {roleInfo.custom_data?.Size ?? 0}, Race: {roleInfo.race}");
-
- // Log first few bytes of custom_data for debugging
- if (roleInfo.custom_data != null && roleInfo.custom_data.Size > 0)
- {
- byte[] customDataPreview = new byte[Math.Min(16, (int)roleInfo.custom_data.Size)];
- Array.Copy(roleInfo.custom_data.ByteArray, 0, customDataPreview, 0, customDataPreview.Length);
- string hexPreview = BitConverter.ToString(customDataPreview).Replace("-", " ");
- Debug.Log($"[GameSession] Custom_data preview (first 16 bytes): {hexPreview}");
- }
-
- Debug.Log($"[GameSession] Sending createrole protocol (Type: {createRoleProtocol.Type})");
- SendProtocol(createRoleProtocol);
- }
-
- ///
- /// Helper method to create a new RoleInfo for character creation.
- /// Matches C++ NewCharacterImpl behavior.
- ///
- public static RoleInfo CreateNewRoleInfo(string name, int profession, int gender)
- {
- RoleInfo roleInfo = new RoleInfo();
-
- // Set basic info
- roleInfo.occupation = (byte)profession;
- roleInfo.gender = (byte)gender;
- roleInfo.level = 1;
- roleInfo.level2 = 0;
- roleInfo.status = 0; // _ROLE_STATUS_NORMAL
- roleInfo.delete_time = 0;
- roleInfo.create_time = 0; // Server will set this
- roleInfo.lastlogin_time = 0;
- roleInfo.posx = 0.0f;
- roleInfo.posy = 0.0f;
- roleInfo.posz = 0.0f;
- roleInfo.worldtag = 0; // Server will set this
- roleInfo.referrer_role = 0;
- roleInfo.cash_add = 0;
-
- // Set name - C++ uses Unicode encoding (ACHAR = wchar_t)
- if (!string.IsNullOrEmpty(name))
- {
- byte[] nameBytes = Encoding.Unicode.GetBytes(name);
- roleInfo.name = new Octets(nameBytes);
- }
- else
- {
- roleInfo.name = new Octets();
- }
-
- // Initialize equipment list with 29 empty items (IVTRSIZE_EQUIPPACK = 29)
- roleInfo.equipment = new List();
- for (int i = 0; i < 29; i++)
- {
- // Important: GRoleInventory.data must be non-null or Marshal() will fail and the packet won't send.
- roleInfo.equipment.Add(new GRoleInventory
- {
- id = 0,
- pos = i,
- count = 0,
- max_count = 0,
- data = new Octets(),
- proctype = 0,
- expire_date = 0,
- guid1 = 0,
- guid2 = 0,
- mask = 0
- });
- }
-
- // Initialize custom data exactly as C++ does: memset to 0, then set specific values
- // This matches C++ LoadDefaultCustomizeData behavior
- roleInfo.custom_data = CreateDefaultCustomizeData(profession, gender);
-
- // Initialize other empty custom data fields
- roleInfo.custom_status = new Octets();
- roleInfo.charactermode = new Octets();
- roleInfo.reincarnation_data = new Octets();
- roleInfo.realm_data = new Octets();
-
- // Race is typically determined by profession, but we'll leave it at 0 for now
- // Server may set it based on profession
- roleInfo.race = 0;
-
- return roleInfo;
- }
-
- ///
- /// Creates default customize data exactly matching C++ LoadDefaultCustomizeData behavior.
- /// Structure layout - trying multiple sizes due to potential padding:
- /// - DWORD dwVersion (offset 0-3, 4 bytes) = 0x10007001
- /// - FACE_CUSTOMIZEDATA faceData (offset 4-87, 84 bytes) = all zeros
- /// - unsigned short bodyID (offset 88-89, 2 bytes) = 0
- /// - A3DCOLOR colorBody (offset 90-93, 4 bytes) = 0xffffffff
- /// - 6 unsigned char scales (offset 94-99, 6 bytes) = all 128
- /// Note: C++ sizeof might include padding, trying 100, 104, 108 bytes
- ///
- private static Octets CreateDefaultCustomizeData(int profession, int gender)
- {
- // C++ sizeof(PLAYER_CUSTOMIZEDATA) - Based on server response, it expects 176 bytes
- // The C++ code sends: sizeof(CECPlayer::PLAYER_CUSTOMIZEDATA) which appears to be 176 bytes
- // Server response shows: custom_data size=176, so server expects/receives 176 bytes
- // Structure layout (176 bytes total):
- // - DWORD dwVersion (4 bytes, offset 0) = 0x10007001
- // - FACE_CUSTOMIZEDATA faceData (84 bytes, offset 4) = all zeros for now
- // - unsigned short bodyID (2 bytes, offset 88) = 0
- // - A3DCOLOR colorBody (4 bytes, offset 90) = 0xffffffff
- // - 6 unsigned char scales (6 bytes, offset 94) = all 128
- // - Padding/additional fields (76 bytes, offset 100-175) = all zeros
- const int CUSTOMIZE_DATA_SIZE = 176; // Match server expectation (176 bytes from response)
- const uint CUSTOMIZE_DATA_VERSION = 0x10007001; // CUSTOMIZE_DATA_VERSION from C++
- byte[] customDataBytes = new byte[CUSTOMIZE_DATA_SIZE];
-
- // Step 1: memset to 0 (already done by new byte[])
-
- // Step 2: Set dwVersion at offset 0-3 (little-endian)
- byte[] versionBytes = BitConverter.GetBytes(CUSTOMIZE_DATA_VERSION);
- Array.Copy(versionBytes, 0, customDataBytes, 0, 4);
-
- // Step 3: FACE_CUSTOMIZEDATA at offset 4-87 is already zero (84 bytes)
- // (In C++ this would be loaded from INI, but for now we use zeros)
-
- // Step 4: bodyID at offset 88-89 is already zero (2 bytes)
- // Note: There might be 2 bytes padding here if struct is 4-byte aligned
-
- // Step 5: Set colorBody to 0xffffffff
- // Try offset 90 first (no padding), if that doesn't work try 92 (with padding)
- byte[] colorBodyBytes = BitConverter.GetBytes(0xffffffffu);
- Array.Copy(colorBodyBytes, 0, customDataBytes, 90, 4); // Try 90 first
-
- // Step 6: Set all 6 scale fields to 128
- // Try offset 94 first (no padding), if that doesn't work try 96 (with padding)
- for (int i = 94; i < 100; i++)
- {
- customDataBytes[i] = 128;
- }
-
- return new Octets(customDataBytes);
- }
-
- public void EnterWorldAsync(RoleInfo role, Action callback)
- {
- SendProtocol(new enterworld()
- {
- Roleid = _selectedRole.roleid,
- Provider_link_id = 0,
- }, callback);
- }
-
- public void RequestDropIvtrItem(byte index, int amount)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.CreateDropIvtrItem(index, amount);
- SendProtocol(gamedatasendRequest);
- }
-
- public void RequestDropEquipItem(byte index)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.CreateDropEquipItem(index);
- SendProtocol(gamedatasendRequest);
- }
-
- public void RequestPickupItem(int idItem, int tid)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.CreatePickupItem(idItem, tid);
- SendProtocol(gamedatasendRequest);
- }
-
- public void c2s_SendCmdGetIvtrDetailData(byte byPackage, Action callback)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = CSNetwork.C2SCommand.C2SCommandFactory.c2s_SendCmdGetIvtrDetailData(byPackage);
- SendProtocol(gamedatasendRequest, callback);
- }
-
- public void c2s_SendCmdQueryCashInfo()
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdQueryCashInfo();
- SendProtocol(gamedatasendRequest);
- }
-
- public void c2s_SendCmdOpenFashionTrash(string password)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdOpenFashionTrash(password);
- SendProtocol(gamedatasendRequest);
- }
-
- public void c2s_SendCmdEquipItem(byte iIvtrIdx, byte iEquipIdx, Action callback)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = CSNetwork.C2SCommand.C2SCommandFactory.c2s_SendCmdEquipItem(iIvtrIdx, iEquipIdx);
- SendProtocol(gamedatasendRequest, callback);
- }
-
- public void c2s_SendCmdReviveVillage(int param = 0)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdReviveVillage(param);
- SendProtocol(gamedatasendRequest);
- }
- public void c2s_SendCmdReviveItem(int param = 0)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdReviveVillage(param);
- SendProtocol(gamedatasendRequest);
- }
- public void RequestReviveByPlayer(int param = 0)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdReviveVillage(param);
- SendProtocol(gamedatasendRequest);
- }
-
-
- public void c2s_SendCmdMallShopping(uint count, CMD_MallShopping.goods[] goodsArray)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = CSNetwork.C2SCommand.C2SCommandFactory.CreateGetMallShopping(count, goodsArray);
- SendProtocol(gamedatasendRequest);
- }
- public void c2s_SendCmdGatherMaterial(int idMatter, int iToolPack, int idToolIndex, int idTool, int idTask)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = CSNetwork.C2SCommand.C2SCommandFactory.c2s_SendCmdGatherMaterial(idMatter, iToolPack, idToolIndex, idTool, idTask);
- SendProtocol(gamedatasendRequest);
- }
-
- public void c2s_SendCmdUseItemWithTarget(byte byPackage, byte bySlot, int tid, byte byPVPMask)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateUseItemWithTarget(byPackage, bySlot, tid, byPVPMask);
- SendProtocol(gamedatasend);
- }
-
- public void RequestOwnItemInfoAsync(
- byte byPackage,
- byte bySlot,
- int type,
- int expire_date,
- int state,
- uint count,
- ushort crc,
- ushort content_length,
- byte[] content,
- Action callback)
- {
- gamedatasend gamedatasendRequest = new gamedatasend();
- gamedatasendRequest.Data = C2SCommandFactory.CreateOwnItemInfo(byPackage, bySlot, type, expire_date, state,
- count, crc, content_length, content);
- SendProtocol(gamedatasendRequest, callback);
- }
-
- // --- Protocol Sending ---
- public void SendProtocol(Protocol protocol, Action complete = null)
- {
- if (IsConnected)
- {
- _logger.Log(LogType.Debug,
- $"Sending protocol: {protocol.GetType().Name} (Detail: {protocol.ToString})");
- BMLogger.Log($"[GameSession] Sending protocol: {protocol.GetType().Name} (Type: {protocol.GetPType()}) + {protocol.ToString}");
- _networkManager.Send(protocol);
- complete?.Invoke();
- }
- else
- {
- _logger.Log(LogType.Warning, $"Cannot send protocol ({protocol.GetType().Name}), not connected.");
- BMLogger.LogError($"[GameSession] Cannot send protocol ({protocol.GetType().Name}), not connected.");
- }
- }
-
- // --- Event Handlers (from NetworkManager) ---
-
- private void OnProtocolReceived(Protocol protocol)
- {
- _logger.Log(LogType.Debug, $"Received protocol: {protocol.GetType().Name} (Type: {protocol.Type})");
- if (protocol is null)
- return;
-
-
- // Route protocol to appropriate handler
- switch (protocol.GetPType())
- {
- case ProtocolType.PROTOCOL_CHALLENGE:
- HandleChallenge((challenge)protocol);
- break;
- case ProtocolType.PROTOCOL_KEYEXCHANGE:
- HandleKeyExchange((KeyExchange)protocol);
- break;
- case ProtocolType.PROTOCOL_ONLINEANNOUNCE:
- HandleOnlineAnnounce((onlineannounce)protocol);
- break;
- case ProtocolType.PROTOCOL_ROLELIST_RE:
- HandleRoleListResponse((RoleListResponse)protocol);
- break;
- // Add cases for other protocols GameSession might need to handle
- case ProtocolType.PROTOCOL_SELECTROLE_RE:
- HandleSelectRoleResponse((SelectRole_Re)protocol);
- //_networkManager.IgnoreBytes = 2;
- break;
- case ProtocolType.PROTOCOL_CREATEROLE_RE:
- HandleCreateRoleResponse((createrole_re)protocol);
- break;
- case ProtocolType.PROTOCOL_ERRORINFO:
- HandleErrorInfo((errorinfo)protocol);
- break;
- case ProtocolType.PROTOCOL_S2CGAMEDATASEND:
- case ProtocolType.PROTOCOL_GAMEDATASEND:
- HandleServerDataSend((gamedatasend)protocol);
- break;
- case ProtocolType.PROTOCOL_CHATMESSAGE:
- _logger.Log(LogType.Warning, $"HoangDev :ProtocolType.PROTOCOL_CHATMESSAGE {protocol.GetPType()}");
- OnPrtcChatMessage(protocol, false);
- break;
- case ProtocolType.PROTOCOL_PLAYERBASEINFO_RE:
- OnPrtcPlayerBaseInfoRe(protocol);
- break;
- case ProtocolType.PROTOCOL_GETUICONFIG_RE: OnPrtcGetConfigRe(protocol); break;
- case ProtocolType.PROTOCOL_PLAYERLOGOUT:
- HandlePlayerLogout((playerlogout)protocol);
- break;
-
- case ProtocolType.PROTOCOL_AUTOTEAMSETGOAL_RE:
- {
- // CECAutoTeam pAutoTeam = CECGameRun.Instance.GetHostPlayer().GetAutoTeam();
- // if( pAutoTeam !=null)
- // pAutoTeam.OnPrtcAutoTeamSetGoalRe((AutoTeamSetGoal_Re)protocol);
- }
- break;
-
- default:
- _logger.Log(LogType.Warning, $"Received unhandled protocol type: {protocol.GetPType()}");
- break;
- }
- }
-
- private void HandlePlayerLogout(playerlogout protocol)
- {
- // Original client receives this before EVENT_DISCONNECT.
- // We just publish it to allow higher-level flow (UnityGameSession/UI) to react.
- PostToUnityContext(() => PlayerLogoutReceived?.Invoke(protocol));
- }
-
- private void HandleServerDataSend(gamedatasend protocol)
- {
- int lenghtHeader = Marshal.SizeOf();
- var pDataBuf = new byte[protocol.Data.ByteArray.Length - lenghtHeader];
- var byteArrHeader = new byte[lenghtHeader];
- long dwDataSize = protocol.Data.Size;
-
- if (dwDataSize < Marshal.SizeOf())
- {
- _logger.Error($"### GameDataSend: size invalid {dwDataSize}");
- return;
- }
-
- dwDataSize -= Marshal.SizeOf(); // subtract the header size (ushort)
- for (int i = 0; i < protocol.Data.ByteArray.Length; i++)
- {
- if (i < lenghtHeader)
- {
- byteArrHeader[i] = protocol.Data.ByteArray[i];
- }
- else
- {
- pDataBuf[i - lenghtHeader] = protocol.Data.ByteArray[i];
- }
- }
-
- var pCmdHeader = BitConverter.ToUInt16(byteArrHeader);
- //sss
-#if UNITY_EDITOR
- if (isDebug)
- {
- BMLogger.LogError($"### GameDataSend: CMDID {pCmdHeader}");
- }
-#endif
- int iHostID = _selectedRole.roleid;
- switch (pCmdHeader)
- {
- case CommandID.PLAYER_INFO_2:
- case CommandID.PLAYER_INFO_3:
- case CommandID.PLAYER_INFO_4:
- case CommandID.PLAYER_INFO_2_LIST:
- case CommandID.PLAYER_INFO_3_LIST:
- case CommandID.PLAYER_INFO_23_LIST:
-
- break;
-
- case CommandID.PLAYER_INFO_1:
- case CommandID.PLAYER_ENTER_WORLD:
- case CommandID.PLAYER_ENTER_SLICE:
- case CommandID.PLAYER_INFO_1_LIST:
- case CommandID.PLAYER_INFO_00:
- case CommandID.SELF_INFO_1:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERINFO, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf,
- pCmdHeader, iHostID);
- break;
- case CommandID.OBJECT_MOVE:
- int lenghtDataType = Marshal.SizeOf();
- byte[] arrByteData = GetBytes(pDataBuf, lenghtDataType, 0);
- int idObjMove = BitConverter.ToInt32(arrByteData);
- if (ISPLAYERID(idObjMove))
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1,
- pDataBuf, pCmdHeader, iHostID);
- }
- else if (ISNPCID(idObjMove))
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCMOVE, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
- pCmdHeader);
- }
-
- break;
- case CommandID.OBJECT_STOP_MOVE:
- {
- int id1 = GPDataTypeHelper.FromBytes(pDataBuf);
-
- if (ISPLAYERID(id1))
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERSTOPMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1,
- pDataBuf, pCmdHeader);
- }
- else if (ISNPCID(id1))
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCSTOPMOVE, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
- pCmdHeader);
- }
-
- break;
- }
- case CommandID.OBJECT_LEAVE_SLICE:
- {
- int id = GPDataTypeHelper.FromBytes(pDataBuf);
- if (ISPLAYERID(id))
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERRUNOUT, (int)MANAGER_INDEX.MAN_PLAYER, -1,
- pDataBuf, pCmdHeader);
- }
- else if (ISNPCID(id))
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCRUNOUT, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
- pCmdHeader);
- }
-
- break;
- }
- case CommandID.OWN_IVTR_DATA:
- case CommandID.OWN_IVTR_DETAIL_DATA:
- case CommandID.GET_OWN_MONEY:
- case CommandID.CHANGE_IVTR_SIZE:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader, iHostID);
- break;
- case CommandID.EXG_IVTR_ITEM:
- case CommandID.MOVE_IVTR_ITEM:
- case CommandID.PLAYER_DROP_ITEM:
- case CommandID.EXG_EQUIP_ITEM:
- case CommandID.EQUIP_ITEM:
- case CommandID.MOVE_EQUIP_ITEM:
- case CommandID.UNFREEZE_IVTR_SLOT:
- case CommandID.PLAYER_EQUIP_TRASHBOX_ITEM:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ITEMOPERATION, (int)MANAGER_INDEX.MAN_PLAYER, 0,
- pDataBuf, pCmdHeader);
- break;
- case CommandID.PLAYER_CASH:
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader, iHostID);
- break;
- }
- case CommandID.MATTER_INFO_LIST:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERINFO, (int)MANAGER_INDEX.MAN_MATTER, 0, pDataBuf,
- pCmdHeader);
- break;
- case CommandID.MATTER_ENTER_WORLD:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERENTWORLD, (int)MANAGER_INDEX.MAN_MATTER, 0,
- pDataBuf, pCmdHeader);
- break;
- case CommandID.PICKUP_ITEM:
- case CommandID.HOST_OBTAIN_ITEM:
- case CommandID.PRODUCE_ONCE:
- case CommandID.TASK_DELIVER_ITEM:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PICKUPITEM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader);
- break;
- case CommandID.MATTER_PICKUP:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PICKUPMATTER, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- case CommandID.PICKUP_MONEY:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PICKUPMONEY, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader);
- break;
- case CommandID.HOST_CORRECT_POS:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_CORRECTPOS, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader, iHostID);
- break;
- case CommandID.EMPTY_ITEM_SLOT:
- case CommandID.OWN_ITEM_INFO:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_OWNITEMINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader, iHostID);
- break;
- case CommandID.PLAYER_DIED:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDIED, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- case CommandID.HOST_DIED:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_DIED, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.PLAYER_REVIVE:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERREVIVE, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- case CommandID.NOTIFY_HOSTPOS:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_GOTO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.NPC_ENTER_SLICE:
- case CommandID.NPC_INFO_LIST:
- case CommandID.NPC_INFO_00:
- case CommandID.NPC_ENTER_WORLD:
- case CommandID.NPC_VISIBLE_TID_NOTIFY:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCINFO, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
- pCmdHeader, dwDataSize);
- break;
- case CommandID.TASK_DATA:
- case CommandID.TASK_VAR_DATA:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TASKDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader, dwDataSize);
- break;
- case CommandID.BE_HURT:
- case CommandID.HURT_RESULT:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_HURTRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader);
- break;
- case CommandID.OBJECT_ATTACK_RESULT:
- //int id = GPDataTypeHelper.FromBytes(pDataBuf);
- cmd_object_atk_result pCmdAtk = GPDataTypeHelper.FromBytes(pDataBuf);
- //BMLogger.LogError($"OBJECT_ATTACK_RESULT: npc ? " + ISNPCID(id));
-
- if (ISPLAYERID(pCmdAtk.attacker_id))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERATKRESULT, MANAGER_INDEX.MAN_PLAYER, -1,
- pDataBuf, pCmdHeader);
- else if (ISNPCID(pCmdAtk.attacker_id))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCATKRESULT, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.HOST_ATTACKRESULT:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATKRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader);
- break;
- case CommandID.HOST_ATTACKED:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATTACKED, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader);
- break;
-
- case CommandID.TEAM_JOIN_TEAM:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_JOINTEAM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.TEAM_LEAVE_PARTY:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_LEAVETEAM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.TEAM_NEW_MEMBER:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_NEWTEAMMEM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.TEAM_MEMBER_DATA:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TEAMMEMBERDATA, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.TEAM_MEMBER_LEAVE:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_LEAVETEAM, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
-
- case CommandID.ERROR_MESSAGE:
- {
- int errRaw = BitConverter.ToInt32(pDataBuf, 0);
- // Note: _logger may be configured as a file logger via SetLogPath(), so also log to console for visibility.
- _logger.Info($"### GameDataSend: ERROR_MESSAGE: {errRaw}");
-#if UNITY_EDITOR
- BMLogger.LogError($"### GameDataSend: ERROR_MESSAGE: {errRaw}");
-#endif
- cmd_error_msg pCmd = GPDataTypeHelper.FromBytes(pDataBuf);
-#if UNITY_EDITOR
- BMLogger.LogError($"### GameDataSend: ERROR_MESSAGE parsed iMessage={pCmd.iMessage}");
-#endif
- Debug.LogError($"### GameDataSend: ERROR_MESSAGE: {errRaw}");
- if (pCmd.iMessage != 0)
- {
- // string szMsg = m_ErrorMsgs.GetWideString(pCmd.iMessage);
- // if (string.IsNullOrEmpty(szMsg))
- // BMLogger.LogError("SERVER - unknown error !");
- // else
- // {
- // BMLogger.LogError("SERVER - error: "+szMsg);
- // }
- // else if (pCmd.iMessage != 2)
- // g_pGame.GetGameRun().AddChatMessage(szMsg, GP_CHAT_MISC);
- }
-
- if (pCmd.iMessage == 2)
- {
- // Attack target is too far
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TARGETISFAR, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- }
- else if (pCmd.iMessage == 20)
- {
- // Failed to cast skill
- //pGameRun.PostMessage(MSG_PM_CASTSKILL, MAN_PLAYER, 0, (DWORD)pDataBuf, pCmdHeader.cmd);
- }
- else if (pCmd.iMessage == 133 || pCmd.iMessage == 134)
- {
- // deal failed
- //pGameRun.PostMessage(MSG_HST_BUY_SELL_FAIL, MAN_PLAYER, 0, (DWORD)pDataBuf, pCmdHeader.cmd);
- }
- else if (pCmd.iMessage == 158)
- {
- // µ±Ç°»ãÂʲ»¶Ô£¬ÖØÐÂÈ¡»ãÂÊ
- //c2s_CmdGetCashMoneyRate();
- }
- else if (pCmd.iMessage == 108 /*&& pGameRun.GetHostPlayer().IsInKingService()*/)
- {
- /* CECGameUIMan* pGameUI = pGameRun.GetUIManager().GetInGameUIMan();
- if (pGameUI)
- pGameUI.EndNPCService();*/
- }
- else if
- (pCmd.iMessage == 108 /*&& pGameRun.GetHostPlayer().GetOfflineShopCtrl().GetNPCSevFlag() != COfflineShopCtrl::NPCSEV_NULL*/
- )
- {
- /* CECGameUIMan* pGameUI = pGameRun.GetUIManager().GetInGameUIMan();
- if (pGameUI)
- pGameUI.EndNPCService();*/
- }
- else if (pCmd.iMessage == 175)
- {
- //c2s_CmdQueryParallelWorld();
- }
- else if (pCmd.iMessage == 6)
- {
- //AP_ActionEvent(AP_EVENT_CANNOTPICKUP);
- }
-
- break;
- }
- case CommandID.SELECT_TARGET:
- case CommandID.UNSELECT:
-
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SELTARGET, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader);
- break;
- case CommandID.NPC_DIED:
- case CommandID.NPC_DIED2:
-
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCDIED, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.OBJECT_DISAPPEAR:
- {
- int lenghtDataType1 = Marshal.SizeOf();
- byte[] arrByteData1 = GetBytes(pDataBuf, lenghtDataType1, 0);
- int objectId = BitConverter.ToInt32(arrByteData1);
- if (ISPLAYERID(objectId))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDISAPPEAR, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- else if (ISNPCID(objectId))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCDISAPPEAR, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
- else if (ISMATTERID(objectId))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERDISAPPEAR, MANAGER_INDEX.MAN_MATTER, 0, pDataBuf, pCmdHeader);
-
- break;
- }
- case CommandID.SELF_INFO_00:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_INFO00, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
- pCmdHeader);
- break;
- case CommandID.NPC_GREETING:
- {
- // If this greeting is from the skill-learn NPC, record it (C++ skill dialog relies on this).
- try
- {
- cmd_npc_greeting greet = GPDataTypeHelper.FromBytes(pDataBuf);
- CECHostSkillModel.Instance.OnNpcGreeting(greet.idObject);
- }
- catch (Exception ex)
- {
- _logger.Log(LogType.Warning, $"Failed to parse NPC_GREETING payload: {ex.Message}");
- }
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_NPCGREETING, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- }
- case CommandID.ACTIVATE_WAYPOINT:
- case CommandID.WAYPOINT_LIST:
-
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_WAYPOINT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.SERVER_TIME:
- {
- cmd_server_time pcmd_server_time = GPDataTypeHelper.FromBytes(pDataBuf);
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_SERVERTIME, -1, 0, pcmd_server_time.time, pcmd_server_time.timebias);
- break;
- }
- case CommandID.SCENE_SERVICE_NPC_LIST:
- {
- CECHostSkillModel.Instance.RecvNPCServiceList(protocol.Data);
- break;
- }
- case CommandID.SKILL_DATA:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SKILLDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.OBJECT_CAST_SKILL:
- case CommandID.OBJECT_CAST_INSTANT_SKILL:
- case CommandID.OBJECT_CAST_POS_SKILL:
- {
- cmd_object_cast_skill pCmd2 = GPDataTypeHelper.FromBytes(pDataBuf,true);
- if (ISPLAYERID(pCmd2.caster))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_CASTSKILL, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- else if (ISNPCID(pCmd2.caster))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCCASTSKILL, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
-
- break;
- }
- case CommandID.LEVEL_UP:
- {
- cmd_level_up pCmdLevelUp = GPDataTypeHelper.FromBytes(pDataBuf); ;
- if (ISPLAYERID(pCmdLevelUp.id))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERLEVELUP, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- else if (ISNPCID(pCmdLevelUp.id))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCLEVELUP, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
- break;
- }
- case CommandID.HOST_START_ATTACK:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_STARTATTACK, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
- break;
- case CommandID.HOST_STOPATTACK:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_STOPATTACK, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
- break;
- case CommandID.HOST_SKILL_ATTACK_RESULT:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SKILLRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.CHANGE_FACE_START:
- case CommandID.CHANGE_FACE_END:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_CHANGEFACE, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
- break;
- case CommandID.ENCHANT_RESULT:
- cmd_enchant_result pCmd3 = GPDataTypeHelper.FromBytes(pDataBuf);
- if (ISPLAYERID(pCmd3.caster))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_ENCHANTRESULT, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- else if (ISNPCID(pCmd3.caster))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_ENCHANTRESULT, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.HOST_STOP_SKILL:
- case CommandID.SELF_SKILL_INTERRUPTED:
- case CommandID.SKILL_PERFORM:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_CASTSKILL, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.SET_COOLDOWN:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SETCOOLTIME, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.HOST_USE_ITEM:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_USEITEM, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.COMBO_SKILL_PREPARE:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_COMBO_SKILL_PREPARE, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
- break;
- case CommandID.PLAYER_EXT_PROP_BASE:
- case CommandID.PLAYER_EXT_PROP_MOVE:
- case CommandID.PLAYER_EXT_PROP_ATK:
- case CommandID.PLAYER_EXT_PROP_DEF:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYEREXTPROP, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- case CommandID.OWN_EXT_PROP:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_OWNEXTPROP, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.OBJECT_DO_EMOTE:
- case CommandID.OBJECT_EMOTE_RESTORE:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDOEMOTE, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- case CommandID.OUT_OF_SIGHT_LIST:
- {
- cmd_out_of_sight_list pCmd5 = default;
- pCmd5.uCount = GPDataTypeHelper.FromBytes(pDataBuf);
- int offset2 = sizeof(uint);
- pCmd5.idList = new int[pCmd5.uCount];
- for (int i = 0; i < pCmd5.uCount; i++)
- {
- pCmd5.idList[i] = GPDataTypeHelper.FromBytes(pDataBuf, offset2);
- offset2 += 4;//sizeof int;
- }
-
- for (uint n = 0; n < pCmd5.uCount; n++)
- {
- if (ISPLAYERID(pCmd5.idList[n]))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYEROUTOFVIEW, MANAGER_INDEX.MAN_PLAYER, -1, pCmd5.idList[n], pCmdHeader);
- else if (ISNPCID(pCmd5.idList[n]))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCOUTOFVIEW, MANAGER_INDEX.MAN_NPC, 0, pCmd5.idList[n], pCmdHeader);
- else if (ISMATTERID(pCmd5.idList[n]))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTEROUTOFVIEW, MANAGER_INDEX.MAN_MATTER, 0, pCmd5.idList[n], pCmdHeader);
- }
-
- break;
- }
- case CommandID.PLAYER_GATHER_START:
- case CommandID.PLAYER_GATHER_STOP:
- case CommandID.MINE_GATHERED:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERGATHER, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- case CommandID.COOLTIME_DATA:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_COOLTIMEDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.OBJECT_TAKEOFF:
- {
- cmd_object_takeoff pCmdTakeOff = GPDataTypeHelper.FromBytes((byte[])pDataBuf);
- if (ISPLAYERID(pCmdTakeOff.object_id))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERFLY, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- }
- case CommandID.OBJECT_LANDING:
- {
- cmd_object_landing pCmdLanding = GPDataTypeHelper.FromBytes((byte[])pDataBuf);
- if (ISPLAYERID(pCmdLanding.object_id))
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERFLY, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- }
- case CommandID.HOST_RUSH_FLY:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERFLY, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.FLYSWORD_TIME:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_FLYSWORDTIME, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.PRODUCE_START:
- case CommandID.PRODUCE_END:
- case CommandID.PRODUCE_NULL:
- // Post MSG_HST_PRODUCEITEM message with command ID as parameter (matches C++ behavior)
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PRODUCEITEM, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
-
-
- case CommandID.LEARN_SKILL:
- BMLogger.LogError("### GameDataSend: LEARN_SKILL");
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_LEARNSKILL, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.GAIN_PET:
- case CommandID.FREE_PET:
- case CommandID.SUMMON_PET:
- case CommandID.RECALL_PET:
- case CommandID.PLAYER_START_PET_OP:
- case CommandID.PLAYER_STOP_PET_OP:
- case CommandID.PET_RECEIVE_EXP:
- case CommandID.PET_LEVELUP:
- case CommandID.PET_ROOM:
- case CommandID.PET_ROOM_CAPACITY:
- case CommandID.PET_HONOR_POINT:
- case CommandID.PET_HUNGER_GAUGE:
- case CommandID.PET_DEAD:
- case CommandID.PET_REVIVE:
- case CommandID.PET_HP_NOTIFY:
- case CommandID.PET_AI_STATE:
- case CommandID.PET_SET_COOLDOWN:
- case CommandID.SUMMON_PLANT_PET:
- case CommandID.PLANT_PET_DISAPPEAR:
- case CommandID.PLANT_PET_HP_NOTIFY:
- case CommandID.PET_PROPERTY:
- case CommandID.PET_REBUILD_INHERIT_START:
- case CommandID.PET_REBUILD_INHERIT_INFO:
- case CommandID.PET_REBUILD_INHERIT_END:
- case CommandID.PET_EVOLUTION_DONE:
- case CommandID.PET_REBUILD_NATURE_START:
- case CommandID.PET_REBUILD_NATURE_INFO:
- case CommandID.PET_REBUILD_NATURE_END:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PETOPT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.SET_PLAYER_LIMIT:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SETPLAYERLIMIT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.PLAYER_MOUNTING:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERMOUNT, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- case CommandID.DUEL_RECV_REQUEST:
- case CommandID.DUEL_REJECT_REQUEST:
- case CommandID.DUEL_PREPARE:
- case CommandID.DUEL_CANCEL:
- case CommandID.HOST_DUEL_START:
- case CommandID.DUEL_STOP:
- case CommandID.DUEL_RESULT:
- // Origin: host duel events use MSG_PM_DUELOPT (391); handler distinguishes by pCmdHeader (214-220)
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_DUELOPT, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.PLAYER_DUEL_START:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDUELOPT, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- break;
- case CommandID.EMBED_ITEM:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_EMBEDITEM, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.CLEAR_TESSERA:
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_CLEARTESSERA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
- break;
- case CommandID.PLAYER_LEAVE_WORLD:
- {
- cmd_player_leave_world pCmd = GPDataTypeHelper.FromBytes(pDataBuf);
- if (ISPLAYERID(pCmd.id))
- {
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYEREXIT, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
- }
- break;
- }
- default:
-#if UNITY_EDITOR
- if (isDebug)
- {
- BMLogger.LogError($"### GameDataSend: Unhandled CMDID {pCmdHeader} (payloadBytes={pDataBuf?.Length ?? 0})");
- }
-#endif
- break;
- }
- }
-
-
- private void HandleSelectRoleResponse(SelectRole_Re protocol)
- {
- _logger.Info($"Select role response {protocol.result}");
- var callback = _selectRoleCallback;
- PostToUnityContext(() => callback?.Invoke(_selectedRole));
- }
-
- private void HandleCreateRoleResponse(createrole_re protocol)
- {
- Debug.Log($"[GameSession] HandleCreateRoleResponse - result: {protocol.result}, roleid: {protocol.roleid}");
-
- if (protocol.result != (int)ErrCode.ERR_SUCCESS)
- {
- string errorMsg = $"Create role failed with result code: {protocol.result} (ERR_SUCCESS = {(int)ErrCode.ERR_SUCCESS})";
- _logger.Log(LogType.Error, errorMsg);
- Debug.LogError($"[GameSession] {errorMsg}");
- var callback = _createRoleCallback;
- _createRoleCallback = null;
- PostToUnityContext(() => callback?.Invoke(null));
- return;
- }
-
- Debug.Log($"[GameSession] Create role successful! RoleID: {protocol.roleid}");
- var successCallback = _createRoleCallback;
- _createRoleCallback = null;
- PostToUnityContext(() => successCallback?.Invoke(protocol.roleinfo));
- }
-
- private void HandleErrorInfo(errorinfo protocol)
- {
- Debug.LogError($"[GameSession] Server error - Errcode: {protocol.Errcode}");
-
- // If we're waiting for create role response and get an error, fail the callback
- if (_createRoleCallback != null)
- {
- Debug.LogError($"[GameSession] Create role failed due to server error: {protocol.Errcode}");
- var callback = _createRoleCallback;
- _createRoleCallback = null;
- PostToUnityContext(() => callback?.Invoke(null));
- }
- }
-
- private void OnErrorOccurred(string errorMessage)
- {
- _logger.Log(LogType.Error, $"Network Error: {errorMessage}");
- FailLoginInProgress(errorMessage);
- FailRoleListInProgress(errorMessage);
- }
-
- private void OnDisconnected()
- {
- _logger.Log(LogType.Info, "Disconnected from server.");
- _currentUserId = -1;
- FailLoginInProgress("Disconnected");
- FailRoleListInProgress("Disconnected");
- // Clear command cache
- m_CmdCache.RemoveAllCmds();
- PostToUnityContext(() => Disconnected?.Invoke());
- }
-
- private void HandleChallenge(challenge challenge)
- {
- if (_loginCallback == null || string.IsNullOrEmpty(_username))
- {
- _logger.Log(LogType.Warning, "Received Challenge but not expecting it or username not set.");
- return;
- }
-
- _logger.Log(LogType.Info, "Handling Challenge...");
-
- response response = new response();
- byte[] usernameBytes = Encoding.ASCII.GetBytes(_username);
- byte[] passwordBytes = Encoding.ASCII.GetBytes(_password);
- response.identity.Replace(usernameBytes);
- response.Setup(new Octets(usernameBytes), new Octets(passwordBytes), challenge.nonce);
-
- uint clientId = 0xffffffff;
- byte[] clientIdBytes = BitConverter.GetBytes(clientId);
- response.cli_fingerprint.Replace(clientIdBytes);
- response.use_token = 0;
-
- _networkManager.SetNonce(response.response_data);
- SendProtocol(response);
- _logger.Log(LogType.Info, "Sent Response.");
- }
-
- private void HandleKeyExchange(KeyExchange keyExchange)
- {
- if (_loginCallback == null || string.IsNullOrEmpty(_username))
- {
- _logger.Log(LogType.Warning, "Received KeyExchange but not expecting it.");
- return;
- }
-
- _logger.Log(LogType.Info, "Handling KeyExchange...");
- keyExchange.Setup(_networkManager, _username);
- keyExchange.Blkickuser = 1;
- SendProtocol(keyExchange);
- _logger.Log(LogType.Info, "Sent KeyExchange acknowledgment/response.");
- }
-
- private void HandleOnlineAnnounce(onlineannounce announce)
- {
- if (_loginCallback == null)
- {
- _logger.Log(LogType.Warning, "Received OnlineAnnounce but not expecting it.");
- return;
- }
-
- _logger.Log(LogType.Info, $"Login successful! UserID: {announce.Userid}, LocalSID: {announce.Localsid}");
- _currentUserId = announce.Userid;
- _localsid = announce.Localsid;
-
- var callback = _loginCallback;
- _loginCallback = null;
- PostToUnityContext(() => callback?.Invoke(true));
- }
-
- private void RequestRoleListInternal(int lastHandle = -1)
- {
- rolelist rolelistRequest = new rolelist();
- rolelistRequest.Userid = _currentUserId;
- rolelistRequest.Localsid = 0;
- rolelistRequest.Handle = lastHandle;
-
- SendProtocol(rolelistRequest);
-
-
- //gamedatasend gamedatasendRequest = new gamedatasend();
- //gamedatasendRequest.Data = C2SCommandFactory.CreatePlayerMove();
-
- //SendProtocol(gamedatasendRequest);
- }
-
- private void HandleRoleListResponse(RoleListResponse response)
- {
- if (_roleListCallback == null || _accumulatedRoles == null)
- {
- _logger.Log(LogType.Warning, "Received RoleListResponse but not expecting it.");
- return;
- }
-
- _logger.Log(LogType.Debug,
- $"Received RoleListResponse. Handle: {response.handle}, Result: {response.result}, Count: {response.rolelist.Count}");
-
- if (response.result == 0)
- {
- _accumulatedRoles.AddRange(response.rolelist);
-
- foreach (var role in response.rolelist)
- {
- try
- {
- string roleName = Encoding.UTF8.GetString(role.name.ByteArray, 0, role.name.Length);
- _logger.Log(LogType.Info, $" - Role ID: {role.roleid}, Name: {roleName}, Level: {role.level}");
- }
- catch (Exception ex)
- {
- _logger.Log(LogType.Error, $" - Error decoding role name: {ex.Message}");
- _logger.LogException(ex);
- }
- }
-
- if (response.handle != -1)
- {
- _logger.Log(LogType.Debug, $"Requesting next batch of roles (handle: {response.handle})...");
- RequestRoleListInternal(response.handle);
- }
- else
- {
- _logger.Log(LogType.Info, $"Finished fetching roles. Total count: {_accumulatedRoles.Count}");
- var callback = _roleListCallback;
- var result = _accumulatedRoles;
- _roleListCallback = null;
- _accumulatedRoles = null;
- PostToUnityContext(() => callback?.Invoke(result));
- }
- }
- else
- {
- _logger.Log(LogType.Error, $"Role list retrieval failed. Result code: {response.result}");
- FailRoleListInProgress($"Role list retrieval failed (Result: {response.result})");
- }
- }
-
- // --- Helper methods for failure handling ---
- private void FailLoginInProgress(string reason)
- {
- if (_loginCallback != null)
- {
- _logger.Log(LogType.Error, $"Login failed: {reason}");
- var callback = _loginCallback;
- _loginCallback = null;
- PostToUnityContext(() => callback?.Invoke(false));
- }
- }
-
- private void FailRoleListInProgress(string reason)
- {
- if (_roleListCallback != null)
- {
- _logger.Log(LogType.Error, $"Role list retrieval failed: {reason}");
- var callback = _roleListCallback;
- _roleListCallback = null;
- _accumulatedRoles = null;
- PostToUnityContext(() => callback?.Invoke(null));
- }
- }
-
- // --- IDisposable Implementation ---
- private bool disposedValue = false;
-
- protected virtual void Dispose(bool disposing)
- {
- if (!disposedValue)
- {
- if (disposing)
- {
- if (_networkManager != null)
- {
- _logger.Log(LogType.Info, "[DUCK] Disposing GameSession and disconnecting...");
- _networkManager.ProtocolReceived -= OnProtocolReceived;
- _networkManager.ErrorOccurred -= OnErrorOccurred;
- _networkManager.Disconnected -= OnDisconnected;
- _networkManager.Disconnect();
- _networkManager.Dispose();
- _networkManager = null;
- }
-
- _loginCallback = null;
- _roleListCallback = null;
- _accumulatedRoles = null;
- }
-
- disposedValue = true;
- }
- }
-
- public void Dispose()
- {
- Dispose(true);
- // GC.SuppressFinalize(this);
- }
-
- public bool ISPLAYERID(int id)
- {
- return id != 0 && (id & 0x80000000) == 0;
- }
- public bool ISNPCID(int id) => ((id & 0x80000000) != 0) && ((id & 0x40000000) == 0);
- public bool ISMATTERID(int id) => ((id) & 0xC0000000) == 0xC0000000;
- private byte[] GetBytes(byte[] bytes, int length, int index)
- {
- byte[] arrByteData = new byte[length];
- for (int i = 0; i < length; i++)
- {
- arrByteData[i] = bytes[i + index];
- }
-
- return arrByteData;
- }
-
- public void c2s_CmdPlayerMove(in Vector3 vCurPos, in Vector3 vDest,
- int iTime, float fSpeed, int iMoveMode, ushort wStamp)
- {
- gamedatasend gamedatasend = new gamedatasend();
-
- gamedatasend.Data =
- C2SCommandFactory.CreatePlayerMove(vCurPos, vDest, (ushort)iTime, fSpeed, (byte)iMoveMode, wStamp);
- SendProtocol(gamedatasend);
- }
- public void c2s_SendCmdCastSkill(int idSkill, byte byPVPMask, int iNumTarget, int[] aTargets)
- {
- gamedatasend gamedatasend = new gamedatasend();
-
- gamedatasend.Data =
- C2SCommandFactory.CreatePlayerCastSkill(idSkill, byPVPMask, iNumTarget, aTargets);
-
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdCastInstantSkill(int idSkill, byte byPVPMask, int iNumTarget, int[] aTargets)
- {
- gamedatasend gamedatasend = new gamedatasend();
-
- gamedatasend.Data =
- C2SCommandFactory.CreatePlayerCastInstantSkill(idSkill, byPVPMask, iNumTarget, aTargets);
-
- SendProtocol(gamedatasend);
- }
-
- public void c2s_CmdCastPosSkill(int idSkill, Vector3 vDest, byte byPVPMask, int iNumTarget, int aTargets)
- {
- gamedatasend gamedatasend = new gamedatasend();
-
- gamedatasend.Data =
- C2SCommandFactory.CreatePlayerCastPosSkill(idSkill, vDest, byPVPMask, iNumTarget, aTargets);
-
- SendProtocol(gamedatasend);
- }
- public void c2s_SendCmdNotifyForceAttack(int iForceAttack, byte refuseBless)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNotifyForceAttack(iForceAttack, refuseBless);
- SendProtocol(gamedatasend);
- }
- public void c2s_SendCmdContinueAction()
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.CONTINUE_ACTION);
- SendProtocol(gamedatasend);
- }
-
- ///
- /// Client logout request. Mirrors original client behavior:
- /// - outType=1: back to select role
- /// - outType=0: logout account
- ///
- public void SendPlayerLogout(int outType, Action complete = null)
- {
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreatePlayerLogoutCmd(outType);
- SendProtocol(g, complete);
- }
- public void c2s_SendCmdStopMove(in Vector3 vDest, float fSpeed, int iMoveMode,
- byte byDir, ushort wStamp, int iTime)
- {
- gamedatasend gamedatasend = new gamedatasend();
-
- gamedatasend.Data =
- C2SCommandFactory.CreatePlayerStop(vDest, fSpeed, (byte)iMoveMode, byDir, wStamp, (ushort)iTime);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_CmdSendEnterPKPrecinctint()
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.ENTER_PK_PROTECTED);
- SendProtocol(gamedatasend);
- }
- public void SendChatData(byte cChannel, in string szMsg, int iPack, int iSlot)
- {
- publicchat publicChat = new publicchat();
- publicChat.Channel = cChannel;
- publicChat.Roleid = m_iCharID;
-
- byte[] unicodeBytes = Encoding.Unicode.GetBytes(szMsg);
- publicChat.Msg.Replace(unicodeBytes);
- _logger.Log(LogType.Warning, $"HoangDev : publicChat {publicChat}");
- SendProtocol(publicChat);
- }
- public void LoadConfigData()
- {
- getuiconfig p = new getuiconfig();
- p.Roleid = m_iCharID;
- SendProtocol(p);
- }
-
- ///
- /// Save config data to server (sends setuiconfig with compressed config blob).
- /// 保存配置数据到服务器(发送 setuiconfig 及压缩后的配置数据)。
- ///
- public void SaveConfigData(byte[] pBuf, int len)
- {
- BMLogger.Log($"[MH] Session.SaveConfigData | len={len}");
-
- if (pBuf == null || len <= 0) return;
- var p = new setuiconfig();
- p.Roleid = m_iCharID;
- p.Localsid = (int)_localsid;
- byte[] slice = new byte[len];
- Buffer.BlockCopy(pBuf, 0, slice, 0, len);
- p.Ui_config = new Octets(slice);
-
- // return;
- SendProtocol(p);
- }
-
- private void SetCharacterID(int iCharID)
- {
- m_iCharID = iCharID;
- }
-
- private void OnPrtcChatMessage(Protocol pProtocol, bool bCalledagain)
- {
- chatmessage p = (chatmessage)pProtocol;
-
- string strTemp = System.Text.Encoding.Unicode.GetString(p.Msg.ToArray(), 0, p.Msg.Length);
-
- _logger.Log(LogType.Warning, $"HoangDev : OnPrtcChatMessage :{strTemp}");
- EventBus.Publish(new ChatMessageEvent(strTemp));
- }
-
- public struct ChatMessageEvent
- {
- public string context;
-
- public ChatMessageEvent(string context)
- {
- this.context = context;
- }
- }
- public void OnPrtcGetConfigRe(Protocol pProtocol)
- {
- getuiconfig_re p = (getuiconfig_re)pProtocol;
- if (p.Result != (int)ErrCode.ERR_SUCCESS)
- BMLogger.LogError("CECGameSession::OnPrtcGetConfigRe, link return error code of " + p.Result);
- else
- {
- if (!CECGameRun.Instance.LoadConfigsFromServer(p.UiConfig.RawBuffer, p.UiConfig.Size))
- {
- // if load failed then use current setting directly
- //TODO : fix later
- EC_Game.GetConfigs().ApplyUserSetting();
- }
-
- // Now, Get config data request is sent after all host initial data ready.
- // so when we receive this reply, we can do some last work before game
- // really starts. Maybe it's not the best place to do these work, but
- // now we do it here.
- // Enalbe game UI
- CECGameUIMan pGameUI = (CECGameUIMan)EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
- if (pGameUI != null)
- {
- pGameUI.EnableUI(true);
-
- // Get referral name for adding friend or other display
- //TODO: a Hung lam phan select role info di
- /* RoleInfo info = EC_Game.GetGameRun().GetSelectedRoleInfo();
- if (info.referrer_role > 0)
- GetPlayerBriefInfo(1, info.referrer_role, 2);*/
- }
-
- CECHostPlayer pHost = EC_Game.GetGameRun().GetHostPlayer();
- pHost.OnAllInitDataReady();
-
- /* if (pHost.IsGM())
- {
- CDlgCountryMap pDlgCountryMap = (CDlgCountryMap)pGameUI.GetDialog("Win_CountryMap");
- pDlgCountryMap.GetConfig();
- }
-
- g_pGame.GetConfigs().ApplyOptimizeSetting();
-
- if (g_pGame.GetConfigs().IsMiniClient())
- CECMCDownload::GetInstance().SendGetDownloadOK();*/
- }
- }
- private void OnPrtcPlayerBaseInfoRe(Protocol pProtocol)
- {
- playerbaseinfo_re p = (playerbaseinfo_re)pProtocol;
- BMLogger.Log($"OnPrtcPlayerBaseInfoRe: {p.Roleid} {p.Player.cls} {p.Player.gender}");
- EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERBASEINFO, MANAGER_INDEX.MAN_PLAYER, -1, p);
- }
-
- public void c2s_CmdNPCSevAcceptTask(int idTask, int idStorage, int idRefreshItem)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateCmdNPCSevAcceptTask(idTask, idStorage, idRefreshItem);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdGetAllData(bool byPack, bool byEquip, bool byTask)
- {
- gamedatasend gamedatasend = new gamedatasend();
-
- gamedatasend.Data = C2SCommandFactory.CreateGetAllDataCommand(byPack, byEquip, byTask);
- _logger.Log(LogType.Warning, $"[Dat]- SendCmdGetAllData {byPack},{byEquip},{byTask}");
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdNPCSevHello(int nid)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevHelloDataCommand(nid);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_CmdNormalAttack(byte byPVPMask)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNormalAttackDataCmd(byPVPMask);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdCancelAction()
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(CSNetwork.C2SCommand.CommandID.CANCEL_ACTION);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_CmdUnselect()
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(CSNetwork.C2SCommand.CommandID.UNSELECT);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdSelectTarget(int idTarget)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateSelectTarget(idTarget);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdNPCSevWaypoint()
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevWaypointCmd(NPC_service_type.GP_NPCSEV_WAYPOINT, 0);
- SendProtocol(gamedatasend);
- }
- public void c2s_SendCmdNPCSevMakeItem(int idSkill, int idItem, uint dwCount)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevMakeItemCmd(idSkill, idItem, dwCount);
- SendProtocol(gamedatasend);
- }
- public void GetRoleBaseInfo(int iNumRole, List aRoleIDs)
- {
- int iNumLimit = 128;
- playerbaseinfo p = null;
- int iCount = 0;
-
- while (iCount < iNumRole)
- {
- p = new();
- p.Roleid = _selectedRole.roleid;
-
- int iNumSend = iNumLimit;
- if (iCount + iNumLimit > iNumRole)
- iNumSend = iNumRole - iCount;
-
- if (iNumSend > 0)
- {
- p.playerList = new();
- for (int i = 0; i < iNumSend; i++)
- p.playerList.Add(aRoleIDs[iCount + i]);
-
- SendProtocol(p);
- }
-
-
- iCount += iNumSend;
- }
- }
-
- public void c2s_SendCmdGetOtherEquip(int iNumID, List aIDs)
- {
- // int iNumLimit = 250;
- // int iCount = 0;
-
- // while (iCount < iNumID)
- // {
- // int iNumSend = iNumLimit;
- // if (iCount + iNumLimit > iNumID)
- // iNumSend = iNumID - iCount;
-
- // if (iNumSend > 0)
- // {
- // }
- // }
- }
-
- public void c2s_SendCmdNPCSevAcceptTask(int idTask, int idStorage, int idRefreshItem)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateCmdNPCSevAcceptTask(
- idTask,
- idStorage,
- idRefreshItem);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdNPCSevReturnTask(int idTask, int iChoice)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevReturnTaskCmd(
- idTask,
- iChoice);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdNPCSevTaskMatter(int idTask)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevTaskMatterCmd(idTask);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdNPCSevLearnSkill(int idSkill)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevLearnSkillCmd(idSkill);
- BMLogger.LogError("HoangDev : c2s_SendCmdNPCSevLearnSkill gamedatasend.Data : " + gamedatasend.Data.Size);
- BMLogger.LogError("HoangDev : c2s_SendCmdNPCSevLearnSkill idSkill : " + idSkill);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdNPCSevBuy(int itemNum, C2SCommand.npc_trade_item[] items)
- {
- if (itemNum <= 0 || items == null || items.Length < itemNum)
- return;
-
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevBuyCmd(itemNum, items);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdNPCSevSell(int itemNum, C2SCommand.npc_sell_item[] items)
- {
- if (itemNum <= 0 || items == null || items.Length < itemNum)
- return;
-
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevSellCmd(itemNum, items);
- SendProtocol(gamedatasend);
- }
-
- public void GetRoleCustomizeData(int iNumRole, List aRoleIDs)
- {
- if (iNumRole <= 0 || aRoleIDs == null || aRoleIDs.Count == 0) return;
-
- int iNumLimit = 240;
- int iCount = 0;
-
- while (iCount < iNumRole)
- {
- getcustomdata p = new();
- p.Roleid = _selectedRole.roleid;
-
- int iNumSend = iNumLimit;
- if (iCount + iNumLimit > iNumRole)
- iNumSend = iNumRole - iCount;
-
- for (int i = 0; i < iNumSend; i++)
- p.playerlist.Add(aRoleIDs[iCount + i]);
-
- SendProtocol(p);
-
- iCount += iNumSend;
- }
- }
- public void c2s_SendCmdEmoteAction(uint wPose)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateEmoteActionCmd((int)wPose);
- SendProtocol(gamedatasend);
- }
- public void c2s_SendCmdTaskNotify(byte[] pData, uint dwDataSize)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateTaskNotifyCmd( pData, dwDataSize);
- BMLogger.Log($"[MH Task] c2s_SendCmdTaskNotify Command ID : {pData[0]} Size: {dwDataSize}");
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdStandUp()
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.STAND_UP);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdAutoTeamSetGoal(int type, int goal_id, int op)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateAutoTeamSetGoalCommand(type,goal_id, op);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdTeamInvite(int idPlayer)
- {
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreateTeamInviteCommand(idPlayer);
- SendProtocol(g);
- }
-
- public void c2s_SendCmdDuelRequest(int idTarget)
- {
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreateDuelRequestCommand(idTarget);
- SendProtocol(g);
- }
-
- public void c2s_SendCmdDuelReply(bool accept, int idInviter)
- {
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreateDuelReplyCommand(accept, idInviter);
- SendProtocol(g);
- }
-
- public void c2s_SendCmdTeamKickMember(int idMember)
- {
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreateTeamKickMemberCommand(idMember);
- SendProtocol(g);
- }
-
- public void c2s_SendCmdTeamLeaveParty()
- {
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreateTeamLeavePartyCommand();
- SendProtocol(g);
- }
-
- public void c2s_SendCmdTeamDismissParty()
- {
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreateTeamDismissPartyCommand();
- SendProtocol(g);
- }
-
- public void c2s_SendCmdTeamSetPickupFlag(short pickupFlag)
- {
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreateTeamSetPickupFlagCommand(pickupFlag);
- SendProtocol(g);
- }
-
- public void c2s_SendCmdTeamChangeLeader(int idNewLeader)
- {
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreateTeamChangeLeaderCommand(idNewLeader);
- SendProtocol(g);
- }
-
- public void c2s_SendCmdTeamMemberPos(int count, int[] memberIds)
- {
- if (memberIds == null || count <= 0 || count > memberIds.Length) return;
- var g = new gamedatasend();
- g.Data = C2SCommandFactory.CreateTeamMemberPosCommand(count, memberIds);
- SendProtocol(g);
- }
-
- public void c2s_CmdGoto(float x, float y, float z)
- {
- c2s_SendCmdGoto(x, y, z);
- }
-
- // Send C2S::GOTO command data
- void c2s_SendCmdGoto(float x, float y, float z)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateGoToCommed( x, y, z);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdUseItem(byte byPackage, byte bySlot, int tid, byte byCount)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateUseItemCmd(byPackage, bySlot, tid, byCount);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdGetExtProps()
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.GET_EXT_PROP);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdGivePresent(int roleid, int mail_id, int goods_id, int goods_index, int goods_slot)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateGivePresentCmd(roleid, mail_id, goods_id, goods_index, goods_slot);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdEnterSanctuary(int id)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateEnterSanctuaryCmd(id);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdEnterInstance(int iTransIdx, int idInst)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateEnterInstanceCmd(iTransIdx, idInst);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdActiveRushFly(bool bActive)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateActiveRushFlyCmd(bActive);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdPetCtrl(int idTarget, int cmd, byte[] pParamBuf, int iParamLen)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreatePetCtrlCmd(idTarget, cmd, pParamBuf, iParamLen);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdQueryFactionPVPInfo(int faction_id)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateQueryFactionPVPInfo(faction_id);
- SendProtocol(gamedatasend);
- }
-
- public void SendCmdPetCtrl(int idTarget, int cmd, object pParamBuf, int iParamLen)
- {
- m_CmdCache.SendCmdPetCtrl(idTarget, cmd, (byte[])pParamBuf, iParamLen);
- }
-
- public void c2s_SendCmdPetSummon(int iPetIdx)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreatePetSummon(iPetIdx);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdNPCSevEmbed(ushort wStoneIdx, ushort wEquipIdx, int tidStone, int tidEquip)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevEmbedCmd(wStoneIdx, wEquipIdx, tidStone, tidEquip);
- SendProtocol(gamedatasend);
- }
- public void c2s_SendCmdGetItemInfo(byte byPackage, byte bySlot)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateGetItemInfoCmd(byPackage, bySlot);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdSetStatusPts(int vitality, int energy, int strength, int agility)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateSetStatusPtCmd(vitality, energy, strength, agility);
- SendProtocol(gamedatasend);
- }
- public void c2s_CmdNPCSevClearEmbeddedChip(int iEquipIdx, int tidEquip)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevClearEmbeddedChipCmd(iEquipIdx, tidEquip);
- SendProtocol(gamedatasend);
- }
-
- public void c2s_SendCmdPetRecall()
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(CSNetwork.C2SCommand.CommandID.RECALL_PET);
- SendProtocol(gamedatasend);
- }
- public void c2s_CmdDebug(ushort icmd, int param1 = int.MinValue)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateDebugCmd(icmd, param1);
- SendProtocol(gamedatasend);
- }
- public void c2s_SendCmdNPCSevHatchPet(int iIvtrIdx, int idEgg)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevHatchPetCmd(iIvtrIdx, idEgg);
- SendProtocol(gamedatasend);
- }
- public void c2s_SendCmdNPCSevRestorePet(int iPetIdx)
- {
- gamedatasend gamedatasend = new gamedatasend();
- gamedatasend.Data = C2SCommandFactory.CreateNPCSevRestorePetCmd(iPetIdx);
- SendProtocol(gamedatasend);
- }
-
- // Cross-server get in (C++: c2s_CmdNPCSevCrossServerGetIn) — TODO: implement C2S packet when needed
- public void c2s_CmdNPCSevCrossServerGetIn()
- {
- // TODO: C2SCommandFactory.CreateNPCSevCrossServerGetInCmd() and SendProtocol
- }
-
- // Cross-server get out (C++: c2s_CmdNPCSevCrossServerGetOut) — TODO: implement C2S packet when needed
- public void c2s_CmdNPCSevCrossServerGetOut()
- {
- // TODO: C2SCommandFactory.CreateNPCSevCrossServerGetOutCmd() and SendProtocol
- }
- }
+using BrewMonster;
+using BrewMonster.Common;
+using BrewMonster.Managers;
+using BrewMonster.Network;
+using BrewMonster.Scripts.Skills;
+using BrewMonster.UI;
+using CSNetwork.C2SCommand;
+using CSNetwork.GPDataType;
+using CSNetwork.Protocols;
+using CSNetwork.Protocols.RPCData;
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using UnityEngine;
+using CommandID = CSNetwork.GPDataType.CommandID;
+
+namespace CSNetwork
+{
+ public class GameSession : IDisposable
+ {
+ private static IPrefixedLogger
+ _logger = LoggerFactory.GetLogger(nameof(GameSession)); // Get class-specific logger
+
+ private NetworkManager _networkManager;
+ private string _host;
+ private int _port;
+ private string _username;
+ private string _password;
+ private int _currentUserId = -1; // To store the UserID after successful login
+ private uint _localsid = 0; // To store the LocalSID from onlineannounce
+ private int m_iCharID;
+ private int m_idLastSelTarget = 0; // ID of selected item last time
+
+ CECStringTab m_ErrorMsgs;
+
+ // State management for async operations and callbacks
+ private Action _loginCallback;
+ private Action> _roleListCallback;
+ private List _accumulatedRoles;
+ private Action _selectRoleCallback;
+ private Action _createRoleCallback;
+ private RoleInfo _selectedRole;
+ public bool IsConnected => _networkManager?.IsConnected ?? false;
+ public static SynchronizationContext Context;
+ private CECC2SCmdCache m_CmdCache; // C2S command cache
+
+ /// Raised when server sends PROTOCOL_PLAYERLOGOUT(69).
+ public event Action PlayerLogoutReceived;
+
+ /// Raised when the underlying network disconnects.
+ public event Action Disconnected;
+
+ private static void PostToUnityContext(Action action)
+ {
+ if (action == null) return;
+ var ctx = Context;
+ if (ctx != null)
+ {
+ ctx.Post(_ => action(), null);
+ }
+ else
+ {
+ action();
+ }
+ }
+#if UNITY_EDITOR
+ public bool isDebug;
+ public bool IsDebug
+ {
+ get => isDebug;
+ set => isDebug = value;
+ }
+#endif
+ public CECC2SCmdCache CmdCache { get => m_CmdCache; }
+
+
+ public GameSession()
+ {
+ _networkManager = new NetworkManager();
+ m_CmdCache = new CECC2SCmdCache();
+ _networkManager.ProtocolReceived += OnProtocolReceived;
+ _networkManager.ErrorOccurred += OnErrorOccurred;
+ _networkManager.Disconnected += OnDisconnected;
+ }
+
+ public void SetLogPath(string path)
+ {
+ LoggerFactory.SetFileLoggerImplementation(new FileLogger());
+ _logger = LoggerFactory.GetCustomLogger(path, nameof(GameSession) + GetHashCode(), LoggerType.File);
+ _networkManager.SetLogPath(path);
+ }
+
+ ///
+ /// Connects to the game server asynchronously.
+ ///
+ /// Server hostname or IP address.
+ /// Server port.
+ /// Task representing the asynchronous connect operation. Check IsConnected property or handle Disconnected event for status.
+ public async Task ConnectAsync(string host, int port)
+ {
+ if (IsConnected)
+ {
+ _logger.Log(LogType.Warning, "ConnectAsync called but already connected.");
+ return;
+ }
+
+ _host = host;
+ _port = port;
+ _logger.Log(LogType.Info, $"Attempting to connect to {_host}:{_port}...");
+ try
+ {
+ await _networkManager.ConnectAsync(_host, _port);
+ if (IsConnected)
+ {
+ _logger.Log(LogType.Info, "Connection established.");
+ }
+ else
+ {
+ _logger.Log(LogType.Warning,
+ "Connection failed after ConnectAsync completed (check NetworkManager logs/events).");
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.Log(LogType.Error, $"Connection exception: {ex.Message}");
+ _logger.LogException(ex);
+ OnDisconnected();
+ }
+ }
+
+
+ public void Disconnect()
+ {
+ _networkManager.Disconnect();
+ }
+
+ ///
+ /// Initiates the login process asynchronously.
+ ///
+ /// Account username.
+ /// Account password.
+ /// Action invoked with true on successful login (OnlineAnnounce received), false otherwise.
+ public void LoginAsync(string username, string password, Action callback)
+ {
+ if (!IsConnected)
+ {
+ _logger.Log(LogType.Warning, "LoginAsync called but not connected.");
+ callback?.Invoke(false);
+ return;
+ }
+
+ if (_loginCallback != null)
+ {
+ _logger.Log(LogType.Warning, "LoginAsync called while another login is already in progress.");
+ callback?.Invoke(false);
+ return;
+ }
+
+ _username = username;
+ _password = password;
+ _loginCallback = callback;
+ _currentUserId = -1; // Reset user ID
+
+ _logger.Log(LogType.Info, $"Initiating login for user '{_username}'...");
+ }
+
+ ///
+ /// Initiates fetching the role list asynchronously. Requires successful login.
+ ///
+ /// Action invoked with the complete list of roles, or null/empty list on failure.
+ public void GetRoleListAsync(Action> callback)
+ {
+ if (!IsConnected)
+ {
+ _logger.Log(LogType.Warning, "GetRoleListAsync called but not connected.");
+ callback?.Invoke(null);
+ return;
+ }
+
+ if (_currentUserId == -1)
+ {
+ _logger.Log(LogType.Warning, "GetRoleListAsync called but not logged in.");
+ callback?.Invoke(null);
+ return;
+ }
+
+ if (_roleListCallback != null)
+ {
+ _logger.Log(LogType.Warning,
+ "GetRoleListAsync called while another role list retrieval is already in progress.");
+ callback?.Invoke(null);
+ return;
+ }
+
+ _roleListCallback = callback;
+ _accumulatedRoles = new List();
+ _logger.Log(LogType.Info, "Requesting role list...");
+ RequestRoleListInternal();
+ }
+
+ public RoleInfo GetRoleInfo()
+ {
+ return _selectedRole;
+ }
+
+ public void SelectRoleAsync(RoleInfo role, Action callback)
+ {
+ _selectedRole = role;
+ _selectRoleCallback = callback;
+ SetCharacterID(role.roleid);
+ SendProtocol(new selectrole()
+ {
+ Roleid = role.roleid,
+ Flag = 0
+ });
+ }
+
+ public void CreateRoleAsync(RoleInfo roleInfo, Octets referId, Action callback)
+ {
+ if (!IsConnected)
+ {
+ callback?.Invoke(null);
+ return;
+ }
+
+ if (_currentUserId == -1)
+ {
+ callback?.Invoke(null);
+ return;
+ }
+
+ if (_createRoleCallback != null)
+ {
+ callback?.Invoke(null);
+ return;
+ }
+
+ _createRoleCallback = callback;
+
+ createrole createRoleProtocol = new createrole()
+ {
+ Userid = _currentUserId,
+ Localsid = _localsid,
+ Roleinfo = roleInfo,
+ Referid = referId ?? new Octets()
+ };
+
+ Debug.Log($"[GameSession] Creating role - UserID: {_currentUserId}, Localsid: {_localsid}, Profession: {roleInfo.occupation}, Gender: {roleInfo.gender}");
+ Debug.Log($"[GameSession] RoleInfo details - Name size: {roleInfo.name?.Size ?? 0}, Equipment count: {roleInfo.equipment?.Count ?? 0}, Custom data size: {roleInfo.custom_data?.Size ?? 0}, Race: {roleInfo.race}");
+
+ // Log first few bytes of custom_data for debugging
+ if (roleInfo.custom_data != null && roleInfo.custom_data.Size > 0)
+ {
+ byte[] customDataPreview = new byte[Math.Min(16, (int)roleInfo.custom_data.Size)];
+ Array.Copy(roleInfo.custom_data.ByteArray, 0, customDataPreview, 0, customDataPreview.Length);
+ string hexPreview = BitConverter.ToString(customDataPreview).Replace("-", " ");
+ Debug.Log($"[GameSession] Custom_data preview (first 16 bytes): {hexPreview}");
+ }
+
+ Debug.Log($"[GameSession] Sending createrole protocol (Type: {createRoleProtocol.Type})");
+ SendProtocol(createRoleProtocol);
+ }
+
+ ///
+ /// Helper method to create a new RoleInfo for character creation.
+ /// Matches C++ NewCharacterImpl behavior.
+ ///
+ public static RoleInfo CreateNewRoleInfo(string name, int profession, int gender)
+ {
+ RoleInfo roleInfo = new RoleInfo();
+
+ // Set basic info
+ roleInfo.occupation = (byte)profession;
+ roleInfo.gender = (byte)gender;
+ roleInfo.level = 1;
+ roleInfo.level2 = 0;
+ roleInfo.status = 0; // _ROLE_STATUS_NORMAL
+ roleInfo.delete_time = 0;
+ roleInfo.create_time = 0; // Server will set this
+ roleInfo.lastlogin_time = 0;
+ roleInfo.posx = 0.0f;
+ roleInfo.posy = 0.0f;
+ roleInfo.posz = 0.0f;
+ roleInfo.worldtag = 0; // Server will set this
+ roleInfo.referrer_role = 0;
+ roleInfo.cash_add = 0;
+
+ // Set name - C++ uses Unicode encoding (ACHAR = wchar_t)
+ if (!string.IsNullOrEmpty(name))
+ {
+ byte[] nameBytes = Encoding.Unicode.GetBytes(name);
+ roleInfo.name = new Octets(nameBytes);
+ }
+ else
+ {
+ roleInfo.name = new Octets();
+ }
+
+ // Initialize equipment list with 29 empty items (IVTRSIZE_EQUIPPACK = 29)
+ roleInfo.equipment = new List();
+ for (int i = 0; i < 29; i++)
+ {
+ // Important: GRoleInventory.data must be non-null or Marshal() will fail and the packet won't send.
+ roleInfo.equipment.Add(new GRoleInventory
+ {
+ id = 0,
+ pos = i,
+ count = 0,
+ max_count = 0,
+ data = new Octets(),
+ proctype = 0,
+ expire_date = 0,
+ guid1 = 0,
+ guid2 = 0,
+ mask = 0
+ });
+ }
+
+ // Initialize custom data exactly as C++ does: memset to 0, then set specific values
+ // This matches C++ LoadDefaultCustomizeData behavior
+ roleInfo.custom_data = CreateDefaultCustomizeData(profession, gender);
+
+ // Initialize other empty custom data fields
+ roleInfo.custom_status = new Octets();
+ roleInfo.charactermode = new Octets();
+ roleInfo.reincarnation_data = new Octets();
+ roleInfo.realm_data = new Octets();
+
+ // Race is typically determined by profession, but we'll leave it at 0 for now
+ // Server may set it based on profession
+ roleInfo.race = 0;
+
+ return roleInfo;
+ }
+
+ ///
+ /// Creates default customize data exactly matching C++ LoadDefaultCustomizeData behavior.
+ /// Structure layout - trying multiple sizes due to potential padding:
+ /// - DWORD dwVersion (offset 0-3, 4 bytes) = 0x10007001
+ /// - FACE_CUSTOMIZEDATA faceData (offset 4-87, 84 bytes) = all zeros
+ /// - unsigned short bodyID (offset 88-89, 2 bytes) = 0
+ /// - A3DCOLOR colorBody (offset 90-93, 4 bytes) = 0xffffffff
+ /// - 6 unsigned char scales (offset 94-99, 6 bytes) = all 128
+ /// Note: C++ sizeof might include padding, trying 100, 104, 108 bytes
+ ///
+ private static Octets CreateDefaultCustomizeData(int profession, int gender)
+ {
+ // C++ sizeof(PLAYER_CUSTOMIZEDATA) - Based on server response, it expects 176 bytes
+ // The C++ code sends: sizeof(CECPlayer::PLAYER_CUSTOMIZEDATA) which appears to be 176 bytes
+ // Server response shows: custom_data size=176, so server expects/receives 176 bytes
+ // Structure layout (176 bytes total):
+ // - DWORD dwVersion (4 bytes, offset 0) = 0x10007001
+ // - FACE_CUSTOMIZEDATA faceData (84 bytes, offset 4) = all zeros for now
+ // - unsigned short bodyID (2 bytes, offset 88) = 0
+ // - A3DCOLOR colorBody (4 bytes, offset 90) = 0xffffffff
+ // - 6 unsigned char scales (6 bytes, offset 94) = all 128
+ // - Padding/additional fields (76 bytes, offset 100-175) = all zeros
+ const int CUSTOMIZE_DATA_SIZE = 176; // Match server expectation (176 bytes from response)
+ const uint CUSTOMIZE_DATA_VERSION = 0x10007001; // CUSTOMIZE_DATA_VERSION from C++
+ byte[] customDataBytes = new byte[CUSTOMIZE_DATA_SIZE];
+
+ // Step 1: memset to 0 (already done by new byte[])
+
+ // Step 2: Set dwVersion at offset 0-3 (little-endian)
+ byte[] versionBytes = BitConverter.GetBytes(CUSTOMIZE_DATA_VERSION);
+ Array.Copy(versionBytes, 0, customDataBytes, 0, 4);
+
+ // Step 3: FACE_CUSTOMIZEDATA at offset 4-87 is already zero (84 bytes)
+ // (In C++ this would be loaded from INI, but for now we use zeros)
+
+ // Step 4: bodyID at offset 88-89 is already zero (2 bytes)
+ // Note: There might be 2 bytes padding here if struct is 4-byte aligned
+
+ // Step 5: Set colorBody to 0xffffffff
+ // Try offset 90 first (no padding), if that doesn't work try 92 (with padding)
+ byte[] colorBodyBytes = BitConverter.GetBytes(0xffffffffu);
+ Array.Copy(colorBodyBytes, 0, customDataBytes, 90, 4); // Try 90 first
+
+ // Step 6: Set all 6 scale fields to 128
+ // Try offset 94 first (no padding), if that doesn't work try 96 (with padding)
+ for (int i = 94; i < 100; i++)
+ {
+ customDataBytes[i] = 128;
+ }
+
+ return new Octets(customDataBytes);
+ }
+
+ public void EnterWorldAsync(RoleInfo role, Action callback)
+ {
+ SendProtocol(new enterworld()
+ {
+ Roleid = _selectedRole.roleid,
+ Provider_link_id = 0,
+ }, callback);
+ }
+
+ public void RequestDropIvtrItem(byte index, int amount)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = C2SCommandFactory.CreateDropIvtrItem(index, amount);
+ SendProtocol(gamedatasendRequest);
+ }
+
+ public void RequestDropEquipItem(byte index)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = C2SCommandFactory.CreateDropEquipItem(index);
+ SendProtocol(gamedatasendRequest);
+ }
+
+ public void RequestPickupItem(int idItem, int tid)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = C2SCommandFactory.CreatePickupItem(idItem, tid);
+ SendProtocol(gamedatasendRequest);
+ }
+
+ public void c2s_SendCmdGetIvtrDetailData(byte byPackage, Action callback)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = CSNetwork.C2SCommand.C2SCommandFactory.c2s_SendCmdGetIvtrDetailData(byPackage);
+ SendProtocol(gamedatasendRequest, callback);
+ }
+
+ public void c2s_SendCmdQueryCashInfo()
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdQueryCashInfo();
+ SendProtocol(gamedatasendRequest);
+ }
+
+ public void c2s_SendCmdOpenFashionTrash(string password)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdOpenFashionTrash(password);
+ SendProtocol(gamedatasendRequest);
+ }
+
+ public void c2s_SendCmdEquipItem(byte iIvtrIdx, byte iEquipIdx, Action callback)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = CSNetwork.C2SCommand.C2SCommandFactory.c2s_SendCmdEquipItem(iIvtrIdx, iEquipIdx);
+ SendProtocol(gamedatasendRequest, callback);
+ }
+
+ public void c2s_SendCmdReviveVillage(int param = 0)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdReviveVillage(param);
+ SendProtocol(gamedatasendRequest);
+ }
+ public void c2s_SendCmdReviveItem(int param = 0)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdReviveVillage(param);
+ SendProtocol(gamedatasendRequest);
+ }
+ public void RequestReviveByPlayer(int param = 0)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = C2SCommandFactory.c2s_SendCmdReviveVillage(param);
+ SendProtocol(gamedatasendRequest);
+ }
+
+
+ public void c2s_SendCmdMallShopping(uint count, CMD_MallShopping.goods[] goodsArray)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = CSNetwork.C2SCommand.C2SCommandFactory.CreateGetMallShopping(count, goodsArray);
+ SendProtocol(gamedatasendRequest);
+ }
+ public void c2s_SendCmdGatherMaterial(int idMatter, int iToolPack, int idToolIndex, int idTool, int idTask)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = CSNetwork.C2SCommand.C2SCommandFactory.c2s_SendCmdGatherMaterial(idMatter, iToolPack, idToolIndex, idTool, idTask);
+ SendProtocol(gamedatasendRequest);
+ }
+
+ public void c2s_SendCmdUseItemWithTarget(byte byPackage, byte bySlot, int tid, byte byPVPMask)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateUseItemWithTarget(byPackage, bySlot, tid, byPVPMask);
+ SendProtocol(gamedatasend);
+ }
+
+ public void RequestOwnItemInfoAsync(
+ byte byPackage,
+ byte bySlot,
+ int type,
+ int expire_date,
+ int state,
+ uint count,
+ ushort crc,
+ ushort content_length,
+ byte[] content,
+ Action callback)
+ {
+ gamedatasend gamedatasendRequest = new gamedatasend();
+ gamedatasendRequest.Data = C2SCommandFactory.CreateOwnItemInfo(byPackage, bySlot, type, expire_date, state,
+ count, crc, content_length, content);
+ SendProtocol(gamedatasendRequest, callback);
+ }
+
+ // --- Protocol Sending ---
+ public void SendProtocol(Protocol protocol, Action complete = null)
+ {
+ if (IsConnected)
+ {
+ _logger.Log(LogType.Debug,
+ $"Sending protocol: {protocol.GetType().Name} (Detail: {protocol.ToString})");
+ BMLogger.Log($"[GameSession] Sending protocol: {protocol.GetType().Name} (Type: {protocol.GetPType()}) + {protocol.ToString}");
+ _networkManager.Send(protocol);
+ complete?.Invoke();
+ }
+ else
+ {
+ _logger.Log(LogType.Warning, $"Cannot send protocol ({protocol.GetType().Name}), not connected.");
+ BMLogger.LogError($"[GameSession] Cannot send protocol ({protocol.GetType().Name}), not connected.");
+ }
+ }
+
+ // --- Event Handlers (from NetworkManager) ---
+
+ private void OnProtocolReceived(Protocol protocol)
+ {
+ _logger.Log(LogType.Debug, $"Received protocol: {protocol.GetType().Name} (Type: {protocol.Type})");
+ if (protocol is null)
+ return;
+
+
+ // Route protocol to appropriate handler
+ switch (protocol.GetPType())
+ {
+ case ProtocolType.PROTOCOL_CHALLENGE:
+ HandleChallenge((challenge)protocol);
+ break;
+ case ProtocolType.PROTOCOL_KEYEXCHANGE:
+ HandleKeyExchange((KeyExchange)protocol);
+ break;
+ case ProtocolType.PROTOCOL_ONLINEANNOUNCE:
+ HandleOnlineAnnounce((onlineannounce)protocol);
+ break;
+ case ProtocolType.PROTOCOL_ROLELIST_RE:
+ HandleRoleListResponse((RoleListResponse)protocol);
+ break;
+ // Add cases for other protocols GameSession might need to handle
+ case ProtocolType.PROTOCOL_SELECTROLE_RE:
+ HandleSelectRoleResponse((SelectRole_Re)protocol);
+ //_networkManager.IgnoreBytes = 2;
+ break;
+ case ProtocolType.PROTOCOL_CREATEROLE_RE:
+ HandleCreateRoleResponse((createrole_re)protocol);
+ break;
+ case ProtocolType.PROTOCOL_ERRORINFO:
+ HandleErrorInfo((errorinfo)protocol);
+ break;
+ case ProtocolType.PROTOCOL_S2CGAMEDATASEND:
+ case ProtocolType.PROTOCOL_GAMEDATASEND:
+ HandleServerDataSend((gamedatasend)protocol);
+ break;
+ case ProtocolType.PROTOCOL_CHATMESSAGE:
+ _logger.Log(LogType.Warning, $"HoangDev :ProtocolType.PROTOCOL_CHATMESSAGE {protocol.GetPType()}");
+ OnPrtcChatMessage(protocol, false);
+ break;
+ case ProtocolType.PROTOCOL_PLAYERBASEINFO_RE:
+ OnPrtcPlayerBaseInfoRe(protocol);
+ break;
+ case ProtocolType.PROTOCOL_GETUICONFIG_RE: OnPrtcGetConfigRe(protocol); break;
+ case ProtocolType.PROTOCOL_PLAYERLOGOUT:
+ HandlePlayerLogout((playerlogout)protocol);
+ break;
+
+ case ProtocolType.PROTOCOL_AUTOTEAMSETGOAL_RE:
+ {
+ // CECAutoTeam pAutoTeam = CECGameRun.Instance.GetHostPlayer().GetAutoTeam();
+ // if( pAutoTeam !=null)
+ // pAutoTeam.OnPrtcAutoTeamSetGoalRe((AutoTeamSetGoal_Re)protocol);
+ }
+ break;
+
+ default:
+ _logger.Log(LogType.Warning, $"Received unhandled protocol type: {protocol.GetPType()}");
+ break;
+ }
+ }
+
+ private void HandlePlayerLogout(playerlogout protocol)
+ {
+ // Original client receives this before EVENT_DISCONNECT.
+ // We just publish it to allow higher-level flow (UnityGameSession/UI) to react.
+ PostToUnityContext(() => PlayerLogoutReceived?.Invoke(protocol));
+ }
+
+ private void HandleServerDataSend(gamedatasend protocol)
+ {
+ int lenghtHeader = Marshal.SizeOf();
+ var pDataBuf = new byte[protocol.Data.ByteArray.Length - lenghtHeader];
+ var byteArrHeader = new byte[lenghtHeader];
+ long dwDataSize = protocol.Data.Size;
+
+ if (dwDataSize < Marshal.SizeOf())
+ {
+ _logger.Error($"### GameDataSend: size invalid {dwDataSize}");
+ return;
+ }
+
+ dwDataSize -= Marshal.SizeOf(); // subtract the header size (ushort)
+ for (int i = 0; i < protocol.Data.ByteArray.Length; i++)
+ {
+ if (i < lenghtHeader)
+ {
+ byteArrHeader[i] = protocol.Data.ByteArray[i];
+ }
+ else
+ {
+ pDataBuf[i - lenghtHeader] = protocol.Data.ByteArray[i];
+ }
+ }
+
+ var pCmdHeader = BitConverter.ToUInt16(byteArrHeader);
+ //sss
+ // Note: isDebug is UNITY_EDITOR-only. Use runtime gate so we can see logs in Development Build too.
+ bool logInv = Application.isEditor || Debug.isDebugBuild;
+ if (logInv)
+ {
+ // Only log inventory-related commands to avoid spam.
+ if (pCmdHeader == CommandID.OWN_IVTR_DATA ||
+ pCmdHeader == CommandID.OWN_IVTR_DETAIL_DATA ||
+ pCmdHeader == CommandID.OWN_ITEM_INFO ||
+ pCmdHeader == CommandID.EMPTY_ITEM_SLOT ||
+ pCmdHeader == CommandID.PICKUP_ITEM ||
+ pCmdHeader == CommandID.HOST_OBTAIN_ITEM ||
+ pCmdHeader == CommandID.PRODUCE_ONCE ||
+ pCmdHeader == CommandID.TASK_DELIVER_ITEM ||
+ pCmdHeader == CommandID.PURCHASE_ITEM ||
+ pCmdHeader == CommandID.CHANGE_IVTR_SIZE)
+ {
+ Debug.Log($"[INVNET] S2C cmd={pCmdHeader} payloadBytes={pDataBuf?.Length ?? 0}");
+ }
+ }
+
+#if UNITY_EDITOR
+ if (isDebug)
+ {
+ BMLogger.LogError($"### GameDataSend: CMDID {pCmdHeader}");
+ }
+#endif
+ int iHostID = _selectedRole.roleid;
+ switch (pCmdHeader)
+ {
+ case CommandID.PLAYER_INFO_2:
+ case CommandID.PLAYER_INFO_3:
+ case CommandID.PLAYER_INFO_4:
+ case CommandID.PLAYER_INFO_2_LIST:
+ case CommandID.PLAYER_INFO_3_LIST:
+ case CommandID.PLAYER_INFO_23_LIST:
+
+ break;
+
+ case CommandID.PLAYER_INFO_1:
+ case CommandID.PLAYER_ENTER_WORLD:
+ case CommandID.PLAYER_ENTER_SLICE:
+ case CommandID.PLAYER_INFO_1_LIST:
+ case CommandID.PLAYER_INFO_00:
+ case CommandID.SELF_INFO_1:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERINFO, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf,
+ pCmdHeader, iHostID);
+ break;
+ case CommandID.OBJECT_MOVE:
+ int lenghtDataType = Marshal.SizeOf();
+ byte[] arrByteData = GetBytes(pDataBuf, lenghtDataType, 0);
+ int idObjMove = BitConverter.ToInt32(arrByteData);
+ if (ISPLAYERID(idObjMove))
+ {
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1,
+ pDataBuf, pCmdHeader, iHostID);
+ }
+ else if (ISNPCID(idObjMove))
+ {
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCMOVE, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
+ pCmdHeader);
+ }
+
+ break;
+ case CommandID.OBJECT_STOP_MOVE:
+ {
+ int id1 = GPDataTypeHelper.FromBytes(pDataBuf);
+
+ if (ISPLAYERID(id1))
+ {
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERSTOPMOVE, (int)MANAGER_INDEX.MAN_PLAYER, -1,
+ pDataBuf, pCmdHeader);
+ }
+ else if (ISNPCID(id1))
+ {
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCSTOPMOVE, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
+ pCmdHeader);
+ }
+
+ break;
+ }
+ case CommandID.OBJECT_LEAVE_SLICE:
+ {
+ int id = GPDataTypeHelper.FromBytes(pDataBuf);
+ if (ISPLAYERID(id))
+ {
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERRUNOUT, (int)MANAGER_INDEX.MAN_PLAYER, -1,
+ pDataBuf, pCmdHeader);
+ }
+ else if (ISNPCID(id))
+ {
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCRUNOUT, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
+ pCmdHeader);
+ }
+
+ break;
+ }
+ case CommandID.OWN_IVTR_DATA:
+ case CommandID.OWN_IVTR_DETAIL_DATA:
+ case CommandID.GET_OWN_MONEY:
+ case CommandID.CHANGE_IVTR_SIZE:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, iHostID);
+ break;
+ case CommandID.EXG_IVTR_ITEM:
+ case CommandID.MOVE_IVTR_ITEM:
+ case CommandID.PLAYER_DROP_ITEM:
+ case CommandID.EXG_EQUIP_ITEM:
+ case CommandID.EQUIP_ITEM:
+ case CommandID.MOVE_EQUIP_ITEM:
+ case CommandID.UNFREEZE_IVTR_SLOT:
+ case CommandID.PLAYER_EQUIP_TRASHBOX_ITEM:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ITEMOPERATION, (int)MANAGER_INDEX.MAN_PLAYER, 0,
+ pDataBuf, pCmdHeader);
+ break;
+ case CommandID.PLAYER_CASH:
+ {
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_IVTRINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, iHostID);
+ break;
+ }
+ case CommandID.MATTER_INFO_LIST:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERINFO, (int)MANAGER_INDEX.MAN_MATTER, 0, pDataBuf,
+ pCmdHeader);
+ break;
+ case CommandID.MATTER_ENTER_WORLD:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERENTWORLD, (int)MANAGER_INDEX.MAN_MATTER, 0,
+ pDataBuf, pCmdHeader);
+ break;
+ case CommandID.PICKUP_ITEM:
+ case CommandID.HOST_OBTAIN_ITEM:
+ case CommandID.PRODUCE_ONCE:
+ case CommandID.TASK_DELIVER_ITEM:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PICKUPITEM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
+ break;
+ case CommandID.PURCHASE_ITEM:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PURCHASEITEMS, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
+ break;
+ case CommandID.MATTER_PICKUP:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PICKUPMATTER, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.PICKUP_MONEY:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PICKUPMONEY, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
+ break;
+ case CommandID.HOST_CORRECT_POS:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_CORRECTPOS, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, iHostID);
+ break;
+ case CommandID.EMPTY_ITEM_SLOT:
+ case CommandID.OWN_ITEM_INFO:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_OWNITEMINFO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, iHostID);
+ break;
+ case CommandID.PLAYER_DIED:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDIED, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.HOST_DIED:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_DIED, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.PLAYER_REVIVE:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERREVIVE, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.NOTIFY_HOSTPOS:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_GOTO, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.NPC_ENTER_SLICE:
+ case CommandID.NPC_INFO_LIST:
+ case CommandID.NPC_INFO_00:
+ case CommandID.NPC_ENTER_WORLD:
+ case CommandID.NPC_VISIBLE_TID_NOTIFY:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCINFO, (int)MANAGER_INDEX.MAN_NPC, 0, pDataBuf,
+ pCmdHeader, dwDataSize);
+ break;
+ case CommandID.TASK_DATA:
+ case CommandID.TASK_VAR_DATA:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TASKDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader, dwDataSize);
+ break;
+ case CommandID.BE_HURT:
+ case CommandID.HURT_RESULT:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_HURTRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
+ break;
+ case CommandID.OBJECT_ATTACK_RESULT:
+ //int id = GPDataTypeHelper.FromBytes(pDataBuf);
+ cmd_object_atk_result pCmdAtk = GPDataTypeHelper.FromBytes(pDataBuf);
+ //BMLogger.LogError($"OBJECT_ATTACK_RESULT: npc ? " + ISNPCID(id));
+
+ if (ISPLAYERID(pCmdAtk.attacker_id))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERATKRESULT, MANAGER_INDEX.MAN_PLAYER, -1,
+ pDataBuf, pCmdHeader);
+ else if (ISNPCID(pCmdAtk.attacker_id))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCATKRESULT, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.HOST_ATTACKRESULT:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATKRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
+ break;
+ case CommandID.HOST_ATTACKED:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_ATTACKED, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
+ break;
+
+ case CommandID.TEAM_JOIN_TEAM:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_JOINTEAM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.TEAM_LEAVE_PARTY:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_LEAVETEAM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.TEAM_NEW_MEMBER:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_NEWTEAMMEM, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.TEAM_MEMBER_DATA:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TEAMMEMBERDATA, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.TEAM_LEADER_INVITE:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TEAMINVITE, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.TEAM_MEMBER_LEAVE:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_LEAVETEAM, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+
+ case CommandID.ERROR_MESSAGE:
+ {
+ int errRaw = BitConverter.ToInt32(pDataBuf, 0);
+ // Note: _logger may be configured as a file logger via SetLogPath(), so also log to console for visibility.
+ _logger.Info($"### GameDataSend: ERROR_MESSAGE: {errRaw}");
+#if UNITY_EDITOR
+ BMLogger.LogError($"### GameDataSend: ERROR_MESSAGE: {errRaw}");
+#endif
+ cmd_error_msg pCmd = GPDataTypeHelper.FromBytes(pDataBuf);
+#if UNITY_EDITOR
+ BMLogger.LogError($"### GameDataSend: ERROR_MESSAGE parsed iMessage={pCmd.iMessage}");
+#endif
+ Debug.LogError($"### GameDataSend: ERROR_MESSAGE: {errRaw}");
+ if (pCmd.iMessage != 0)
+ {
+ // string szMsg = m_ErrorMsgs.GetWideString(pCmd.iMessage);
+ // if (string.IsNullOrEmpty(szMsg))
+ // BMLogger.LogError("SERVER - unknown error !");
+ // else
+ // {
+ // BMLogger.LogError("SERVER - error: "+szMsg);
+ // }
+ // else if (pCmd.iMessage != 2)
+ // g_pGame.GetGameRun().AddChatMessage(szMsg, GP_CHAT_MISC);
+ }
+
+ if (pCmd.iMessage == 2)
+ {
+ // Attack target is too far
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_TARGETISFAR, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ }
+ else if (pCmd.iMessage == 20)
+ {
+ // Failed to cast skill
+ //pGameRun.PostMessage(MSG_PM_CASTSKILL, MAN_PLAYER, 0, (DWORD)pDataBuf, pCmdHeader.cmd);
+ }
+ else if (pCmd.iMessage == 133 || pCmd.iMessage == 134)
+ {
+ // deal failed
+ //pGameRun.PostMessage(MSG_HST_BUY_SELL_FAIL, MAN_PLAYER, 0, (DWORD)pDataBuf, pCmdHeader.cmd);
+ }
+ else if (pCmd.iMessage == 158)
+ {
+ // µ±Ç°»ãÂʲ»¶Ô£¬ÖØÐÂÈ¡»ãÂÊ
+ //c2s_CmdGetCashMoneyRate();
+ }
+ else if (pCmd.iMessage == 108 /*&& pGameRun.GetHostPlayer().IsInKingService()*/)
+ {
+ /* CECGameUIMan* pGameUI = pGameRun.GetUIManager().GetInGameUIMan();
+ if (pGameUI)
+ pGameUI.EndNPCService();*/
+ }
+ else if
+ (pCmd.iMessage == 108 /*&& pGameRun.GetHostPlayer().GetOfflineShopCtrl().GetNPCSevFlag() != COfflineShopCtrl::NPCSEV_NULL*/
+ )
+ {
+ /* CECGameUIMan* pGameUI = pGameRun.GetUIManager().GetInGameUIMan();
+ if (pGameUI)
+ pGameUI.EndNPCService();*/
+ }
+ else if (pCmd.iMessage == 175)
+ {
+ //c2s_CmdQueryParallelWorld();
+ }
+ else if (pCmd.iMessage == 6)
+ {
+ //AP_ActionEvent(AP_EVENT_CANNOTPICKUP);
+ }
+
+ break;
+ }
+ case CommandID.SELECT_TARGET:
+ case CommandID.UNSELECT:
+
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SELTARGET, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
+ break;
+ case CommandID.NPC_DIED:
+ case CommandID.NPC_DIED2:
+
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCDIED, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.OBJECT_DISAPPEAR:
+ {
+ int lenghtDataType1 = Marshal.SizeOf();
+ byte[] arrByteData1 = GetBytes(pDataBuf, lenghtDataType1, 0);
+ int objectId = BitConverter.ToInt32(arrByteData1);
+ if (ISPLAYERID(objectId))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDISAPPEAR, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ else if (ISNPCID(objectId))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCDISAPPEAR, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
+ else if (ISMATTERID(objectId))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTERDISAPPEAR, MANAGER_INDEX.MAN_MATTER, 0, pDataBuf, pCmdHeader);
+
+ break;
+ }
+ case CommandID.SELF_INFO_00:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_INFO00, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf,
+ pCmdHeader);
+ break;
+ case CommandID.NPC_GREETING:
+ {
+ // If this greeting is from the skill-learn NPC, record it (C++ skill dialog relies on this).
+ try
+ {
+ cmd_npc_greeting greet = GPDataTypeHelper.FromBytes(pDataBuf);
+ CECHostSkillModel.Instance.OnNpcGreeting(greet.idObject);
+ }
+ catch (Exception ex)
+ {
+ _logger.Log(LogType.Warning, $"Failed to parse NPC_GREETING payload: {ex.Message}");
+ }
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_NPCGREETING, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ }
+ case CommandID.ACTIVATE_WAYPOINT:
+ case CommandID.WAYPOINT_LIST:
+
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_WAYPOINT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.SERVER_TIME:
+ {
+ cmd_server_time pcmd_server_time = GPDataTypeHelper.FromBytes(pDataBuf);
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_SERVERTIME, -1, 0, pcmd_server_time.time, pcmd_server_time.timebias);
+ break;
+ }
+ case CommandID.SCENE_SERVICE_NPC_LIST:
+ {
+ CECHostSkillModel.Instance.RecvNPCServiceList(protocol.Data);
+ break;
+ }
+ case CommandID.SKILL_DATA:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SKILLDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.OBJECT_CAST_SKILL:
+ case CommandID.OBJECT_CAST_INSTANT_SKILL:
+ case CommandID.OBJECT_CAST_POS_SKILL:
+ {
+ cmd_object_cast_skill pCmd2 = GPDataTypeHelper.FromBytes(pDataBuf,true);
+ if (ISPLAYERID(pCmd2.caster))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_CASTSKILL, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ else if (ISNPCID(pCmd2.caster))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCCASTSKILL, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
+
+ break;
+ }
+ case CommandID.LEVEL_UP:
+ {
+ cmd_level_up pCmdLevelUp = GPDataTypeHelper.FromBytes(pDataBuf); ;
+ if (ISPLAYERID(pCmdLevelUp.id))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERLEVELUP, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ else if (ISNPCID(pCmdLevelUp.id))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCLEVELUP, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
+ break;
+ }
+ case CommandID.HOST_START_ATTACK:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_STARTATTACK, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
+ break;
+ case CommandID.HOST_STOPATTACK:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_STOPATTACK, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
+ break;
+ case CommandID.HOST_SKILL_ATTACK_RESULT:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SKILLRESULT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.CHANGE_FACE_START:
+ case CommandID.CHANGE_FACE_END:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_CHANGEFACE, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
+ break;
+ case CommandID.ENCHANT_RESULT:
+ cmd_enchant_result pCmd3 = GPDataTypeHelper.FromBytes(pDataBuf);
+ if (ISPLAYERID(pCmd3.caster))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_ENCHANTRESULT, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ else if (ISNPCID(pCmd3.caster))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_ENCHANTRESULT, MANAGER_INDEX.MAN_NPC, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.HOST_STOP_SKILL:
+ case CommandID.SELF_SKILL_INTERRUPTED:
+ case CommandID.SKILL_PERFORM:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_CASTSKILL, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.SET_COOLDOWN:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SETCOOLTIME, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.HOST_USE_ITEM:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_USEITEM, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.COMBO_SKILL_PREPARE:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_COMBO_SKILL_PREPARE, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader, dwDataSize);
+ break;
+ case CommandID.PLAYER_EXT_PROP_BASE:
+ case CommandID.PLAYER_EXT_PROP_MOVE:
+ case CommandID.PLAYER_EXT_PROP_ATK:
+ case CommandID.PLAYER_EXT_PROP_DEF:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYEREXTPROP, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.OWN_EXT_PROP:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_OWNEXTPROP, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.OBJECT_DO_EMOTE:
+ case CommandID.OBJECT_EMOTE_RESTORE:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDOEMOTE, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.OUT_OF_SIGHT_LIST:
+ {
+ cmd_out_of_sight_list pCmd5 = default;
+ pCmd5.uCount = GPDataTypeHelper.FromBytes(pDataBuf);
+ int offset2 = sizeof(uint);
+ pCmd5.idList = new int[pCmd5.uCount];
+ for (int i = 0; i < pCmd5.uCount; i++)
+ {
+ pCmd5.idList[i] = GPDataTypeHelper.FromBytes(pDataBuf, offset2);
+ offset2 += 4;//sizeof int;
+ }
+
+ for (uint n = 0; n < pCmd5.uCount; n++)
+ {
+ if (ISPLAYERID(pCmd5.idList[n]))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYEROUTOFVIEW, MANAGER_INDEX.MAN_PLAYER, -1, pCmd5.idList[n], pCmdHeader);
+ else if (ISNPCID(pCmd5.idList[n]))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_NM_NPCOUTOFVIEW, MANAGER_INDEX.MAN_NPC, 0, pCmd5.idList[n], pCmdHeader);
+ else if (ISMATTERID(pCmd5.idList[n]))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_MM_MATTEROUTOFVIEW, MANAGER_INDEX.MAN_MATTER, 0, pCmd5.idList[n], pCmdHeader);
+ }
+
+ break;
+ }
+ case CommandID.PLAYER_GATHER_START:
+ case CommandID.PLAYER_GATHER_STOP:
+ case CommandID.MINE_GATHERED:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERGATHER, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.COOLTIME_DATA:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_COOLTIMEDATA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.OBJECT_TAKEOFF:
+ {
+ cmd_object_takeoff pCmdTakeOff = GPDataTypeHelper.FromBytes((byte[])pDataBuf);
+ if (ISPLAYERID(pCmdTakeOff.object_id))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERFLY, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ }
+ case CommandID.OBJECT_LANDING:
+ {
+ cmd_object_landing pCmdLanding = GPDataTypeHelper.FromBytes((byte[])pDataBuf);
+ if (ISPLAYERID(pCmdLanding.object_id))
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERFLY, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ }
+ case CommandID.HOST_RUSH_FLY:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERFLY, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.FLYSWORD_TIME:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_FLYSWORDTIME, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.PRODUCE_START:
+ case CommandID.PRODUCE_END:
+ case CommandID.PRODUCE_NULL:
+ // Post MSG_HST_PRODUCEITEM message with command ID as parameter (matches C++ behavior)
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PRODUCEITEM, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+
+
+ case CommandID.LEARN_SKILL:
+ BMLogger.LogError("### GameDataSend: LEARN_SKILL");
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_LEARNSKILL, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.GAIN_PET:
+ case CommandID.FREE_PET:
+ case CommandID.SUMMON_PET:
+ case CommandID.RECALL_PET:
+ case CommandID.PLAYER_START_PET_OP:
+ case CommandID.PLAYER_STOP_PET_OP:
+ case CommandID.PET_RECEIVE_EXP:
+ case CommandID.PET_LEVELUP:
+ case CommandID.PET_ROOM:
+ case CommandID.PET_ROOM_CAPACITY:
+ case CommandID.PET_HONOR_POINT:
+ case CommandID.PET_HUNGER_GAUGE:
+ case CommandID.PET_DEAD:
+ case CommandID.PET_REVIVE:
+ case CommandID.PET_HP_NOTIFY:
+ case CommandID.PET_AI_STATE:
+ case CommandID.PET_SET_COOLDOWN:
+ case CommandID.SUMMON_PLANT_PET:
+ case CommandID.PLANT_PET_DISAPPEAR:
+ case CommandID.PLANT_PET_HP_NOTIFY:
+ case CommandID.PET_PROPERTY:
+ case CommandID.PET_REBUILD_INHERIT_START:
+ case CommandID.PET_REBUILD_INHERIT_INFO:
+ case CommandID.PET_REBUILD_INHERIT_END:
+ case CommandID.PET_EVOLUTION_DONE:
+ case CommandID.PET_REBUILD_NATURE_START:
+ case CommandID.PET_REBUILD_NATURE_INFO:
+ case CommandID.PET_REBUILD_NATURE_END:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_PETOPT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.SET_PLAYER_LIMIT:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_SETPLAYERLIMIT, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.PLAYER_MOUNTING:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERMOUNT, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.DUEL_RECV_REQUEST:
+ case CommandID.DUEL_REJECT_REQUEST:
+ case CommandID.DUEL_PREPARE:
+ case CommandID.DUEL_CANCEL:
+ case CommandID.HOST_DUEL_START:
+ case CommandID.DUEL_STOP:
+ case CommandID.DUEL_RESULT:
+ // Origin: host duel events use MSG_PM_DUELOPT (391); handler distinguishes by pCmdHeader (214-220)
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_DUELOPT, (int)MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.PLAYER_DUEL_START:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERDUELOPT, (int)MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.EMBED_ITEM:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_EMBEDITEM, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.CLEAR_TESSERA:
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_HST_CLEARTESSERA, MANAGER_INDEX.MAN_PLAYER, 0, pDataBuf, pCmdHeader);
+ break;
+ case CommandID.PLAYER_LEAVE_WORLD:
+ {
+ cmd_player_leave_world pCmd = GPDataTypeHelper.FromBytes(pDataBuf);
+ if (ISPLAYERID(pCmd.id))
+ {
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYEREXIT, MANAGER_INDEX.MAN_PLAYER, -1, pDataBuf, pCmdHeader);
+ }
+ break;
+ }
+ default:
+#if UNITY_EDITOR
+ if (isDebug)
+ {
+ BMLogger.LogError($"### GameDataSend: Unhandled CMDID {pCmdHeader} (payloadBytes={pDataBuf?.Length ?? 0})");
+ }
+#endif
+ break;
+ }
+ }
+
+
+ private void HandleSelectRoleResponse(SelectRole_Re protocol)
+ {
+ _logger.Info($"Select role response {protocol.result}");
+ var callback = _selectRoleCallback;
+ PostToUnityContext(() => callback?.Invoke(_selectedRole));
+ }
+
+ private void HandleCreateRoleResponse(createrole_re protocol)
+ {
+ Debug.Log($"[GameSession] HandleCreateRoleResponse - result: {protocol.result}, roleid: {protocol.roleid}");
+
+ if (protocol.result != (int)ErrCode.ERR_SUCCESS)
+ {
+ string errorMsg = $"Create role failed with result code: {protocol.result} (ERR_SUCCESS = {(int)ErrCode.ERR_SUCCESS})";
+ _logger.Log(LogType.Error, errorMsg);
+ Debug.LogError($"[GameSession] {errorMsg}");
+ var callback = _createRoleCallback;
+ _createRoleCallback = null;
+ PostToUnityContext(() => callback?.Invoke(null));
+ return;
+ }
+
+ Debug.Log($"[GameSession] Create role successful! RoleID: {protocol.roleid}");
+ var successCallback = _createRoleCallback;
+ _createRoleCallback = null;
+ PostToUnityContext(() => successCallback?.Invoke(protocol.roleinfo));
+ }
+
+ private void HandleErrorInfo(errorinfo protocol)
+ {
+ Debug.LogError($"[GameSession] Server error - Errcode: {protocol.Errcode}");
+
+ // If we're waiting for create role response and get an error, fail the callback
+ if (_createRoleCallback != null)
+ {
+ Debug.LogError($"[GameSession] Create role failed due to server error: {protocol.Errcode}");
+ var callback = _createRoleCallback;
+ _createRoleCallback = null;
+ PostToUnityContext(() => callback?.Invoke(null));
+ }
+ }
+
+ private void OnErrorOccurred(string errorMessage)
+ {
+ _logger.Log(LogType.Error, $"Network Error: {errorMessage}");
+ FailLoginInProgress(errorMessage);
+ FailRoleListInProgress(errorMessage);
+ }
+
+ private void OnDisconnected()
+ {
+ _logger.Log(LogType.Info, "Disconnected from server.");
+ _currentUserId = -1;
+ FailLoginInProgress("Disconnected");
+ FailRoleListInProgress("Disconnected");
+ // Clear command cache
+ m_CmdCache.RemoveAllCmds();
+ PostToUnityContext(() => Disconnected?.Invoke());
+ }
+
+ private void HandleChallenge(challenge challenge)
+ {
+ if (_loginCallback == null || string.IsNullOrEmpty(_username))
+ {
+ _logger.Log(LogType.Warning, "Received Challenge but not expecting it or username not set.");
+ return;
+ }
+
+ _logger.Log(LogType.Info, "Handling Challenge...");
+
+ response response = new response();
+ byte[] usernameBytes = Encoding.ASCII.GetBytes(_username);
+ byte[] passwordBytes = Encoding.ASCII.GetBytes(_password);
+ response.identity.Replace(usernameBytes);
+ response.Setup(new Octets(usernameBytes), new Octets(passwordBytes), challenge.nonce);
+
+ uint clientId = 0xffffffff;
+ byte[] clientIdBytes = BitConverter.GetBytes(clientId);
+ response.cli_fingerprint.Replace(clientIdBytes);
+ response.use_token = 0;
+
+ _networkManager.SetNonce(response.response_data);
+ SendProtocol(response);
+ _logger.Log(LogType.Info, "Sent Response.");
+ }
+
+ private void HandleKeyExchange(KeyExchange keyExchange)
+ {
+ if (_loginCallback == null || string.IsNullOrEmpty(_username))
+ {
+ _logger.Log(LogType.Warning, "Received KeyExchange but not expecting it.");
+ return;
+ }
+
+ _logger.Log(LogType.Info, "Handling KeyExchange...");
+ keyExchange.Setup(_networkManager, _username);
+ keyExchange.Blkickuser = 1;
+ SendProtocol(keyExchange);
+ _logger.Log(LogType.Info, "Sent KeyExchange acknowledgment/response.");
+ }
+
+ private void HandleOnlineAnnounce(onlineannounce announce)
+ {
+ if (_loginCallback == null)
+ {
+ _logger.Log(LogType.Warning, "Received OnlineAnnounce but not expecting it.");
+ return;
+ }
+
+ _logger.Log(LogType.Info, $"Login successful! UserID: {announce.Userid}, LocalSID: {announce.Localsid}");
+ _currentUserId = announce.Userid;
+ _localsid = announce.Localsid;
+
+ var callback = _loginCallback;
+ _loginCallback = null;
+ PostToUnityContext(() => callback?.Invoke(true));
+ }
+
+ private void RequestRoleListInternal(int lastHandle = -1)
+ {
+ rolelist rolelistRequest = new rolelist();
+ rolelistRequest.Userid = _currentUserId;
+ rolelistRequest.Localsid = 0;
+ rolelistRequest.Handle = lastHandle;
+
+ SendProtocol(rolelistRequest);
+
+
+ //gamedatasend gamedatasendRequest = new gamedatasend();
+ //gamedatasendRequest.Data = C2SCommandFactory.CreatePlayerMove();
+
+ //SendProtocol(gamedatasendRequest);
+ }
+
+ private void HandleRoleListResponse(RoleListResponse response)
+ {
+ if (_roleListCallback == null || _accumulatedRoles == null)
+ {
+ _logger.Log(LogType.Warning, "Received RoleListResponse but not expecting it.");
+ return;
+ }
+
+ _logger.Log(LogType.Debug,
+ $"Received RoleListResponse. Handle: {response.handle}, Result: {response.result}, Count: {response.rolelist.Count}");
+
+ if (response.result == 0)
+ {
+ _accumulatedRoles.AddRange(response.rolelist);
+
+ foreach (var role in response.rolelist)
+ {
+ try
+ {
+ string roleName = Encoding.UTF8.GetString(role.name.ByteArray, 0, role.name.Length);
+ _logger.Log(LogType.Info, $" - Role ID: {role.roleid}, Name: {roleName}, Level: {role.level}");
+ }
+ catch (Exception ex)
+ {
+ _logger.Log(LogType.Error, $" - Error decoding role name: {ex.Message}");
+ _logger.LogException(ex);
+ }
+ }
+
+ if (response.handle != -1)
+ {
+ _logger.Log(LogType.Debug, $"Requesting next batch of roles (handle: {response.handle})...");
+ RequestRoleListInternal(response.handle);
+ }
+ else
+ {
+ _logger.Log(LogType.Info, $"Finished fetching roles. Total count: {_accumulatedRoles.Count}");
+ var callback = _roleListCallback;
+ var result = _accumulatedRoles;
+ _roleListCallback = null;
+ _accumulatedRoles = null;
+ PostToUnityContext(() => callback?.Invoke(result));
+ }
+ }
+ else
+ {
+ _logger.Log(LogType.Error, $"Role list retrieval failed. Result code: {response.result}");
+ FailRoleListInProgress($"Role list retrieval failed (Result: {response.result})");
+ }
+ }
+
+ // --- Helper methods for failure handling ---
+ private void FailLoginInProgress(string reason)
+ {
+ if (_loginCallback != null)
+ {
+ _logger.Log(LogType.Error, $"Login failed: {reason}");
+ var callback = _loginCallback;
+ _loginCallback = null;
+ PostToUnityContext(() => callback?.Invoke(false));
+ }
+ }
+
+ private void FailRoleListInProgress(string reason)
+ {
+ if (_roleListCallback != null)
+ {
+ _logger.Log(LogType.Error, $"Role list retrieval failed: {reason}");
+ var callback = _roleListCallback;
+ _roleListCallback = null;
+ _accumulatedRoles = null;
+ PostToUnityContext(() => callback?.Invoke(null));
+ }
+ }
+
+ // --- IDisposable Implementation ---
+ private bool disposedValue = false;
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!disposedValue)
+ {
+ if (disposing)
+ {
+ if (_networkManager != null)
+ {
+ _logger.Log(LogType.Info, "[DUCK] Disposing GameSession and disconnecting...");
+ _networkManager.ProtocolReceived -= OnProtocolReceived;
+ _networkManager.ErrorOccurred -= OnErrorOccurred;
+ _networkManager.Disconnected -= OnDisconnected;
+ _networkManager.Disconnect();
+ _networkManager.Dispose();
+ _networkManager = null;
+ }
+
+ _loginCallback = null;
+ _roleListCallback = null;
+ _accumulatedRoles = null;
+ }
+
+ disposedValue = true;
+ }
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ // GC.SuppressFinalize(this);
+ }
+
+ public bool ISPLAYERID(int id)
+ {
+ return id != 0 && (id & 0x80000000) == 0;
+ }
+ public bool ISNPCID(int id) => ((id & 0x80000000) != 0) && ((id & 0x40000000) == 0);
+ public bool ISMATTERID(int id) => ((id) & 0xC0000000) == 0xC0000000;
+ private byte[] GetBytes(byte[] bytes, int length, int index)
+ {
+ byte[] arrByteData = new byte[length];
+ for (int i = 0; i < length; i++)
+ {
+ arrByteData[i] = bytes[i + index];
+ }
+
+ return arrByteData;
+ }
+
+ public void c2s_CmdPlayerMove(in Vector3 vCurPos, in Vector3 vDest,
+ int iTime, float fSpeed, int iMoveMode, ushort wStamp)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+
+ gamedatasend.Data =
+ C2SCommandFactory.CreatePlayerMove(vCurPos, vDest, (ushort)iTime, fSpeed, (byte)iMoveMode, wStamp);
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_SendCmdCastSkill(int idSkill, byte byPVPMask, int iNumTarget, int[] aTargets)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+
+ gamedatasend.Data =
+ C2SCommandFactory.CreatePlayerCastSkill(idSkill, byPVPMask, iNumTarget, aTargets);
+
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdCastInstantSkill(int idSkill, byte byPVPMask, int iNumTarget, int[] aTargets)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+
+ gamedatasend.Data =
+ C2SCommandFactory.CreatePlayerCastInstantSkill(idSkill, byPVPMask, iNumTarget, aTargets);
+
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_CmdCastPosSkill(int idSkill, Vector3 vDest, byte byPVPMask, int iNumTarget, int aTargets)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+
+ gamedatasend.Data =
+ C2SCommandFactory.CreatePlayerCastPosSkill(idSkill, vDest, byPVPMask, iNumTarget, aTargets);
+
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_SendCmdNotifyForceAttack(int iForceAttack, byte refuseBless)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNotifyForceAttack(iForceAttack, refuseBless);
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_SendCmdContinueAction()
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.CONTINUE_ACTION);
+ SendProtocol(gamedatasend);
+ }
+
+ ///
+ /// Client logout request. Mirrors original client behavior:
+ /// - outType=1: back to select role
+ /// - outType=0: logout account
+ ///
+ public void SendPlayerLogout(int outType, Action complete = null)
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreatePlayerLogoutCmd(outType);
+ SendProtocol(g, complete);
+ }
+ public void c2s_SendCmdStopMove(in Vector3 vDest, float fSpeed, int iMoveMode,
+ byte byDir, ushort wStamp, int iTime)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+
+ gamedatasend.Data =
+ C2SCommandFactory.CreatePlayerStop(vDest, fSpeed, (byte)iMoveMode, byDir, wStamp, (ushort)iTime);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_CmdSendEnterPKPrecinctint()
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.ENTER_PK_PROTECTED);
+ SendProtocol(gamedatasend);
+ }
+ public void SendChatData(byte cChannel, in string szMsg, int iPack, int iSlot)
+ {
+ publicchat publicChat = new publicchat();
+ publicChat.Channel = cChannel;
+ publicChat.Roleid = m_iCharID;
+
+ byte[] unicodeBytes = Encoding.Unicode.GetBytes(szMsg);
+ publicChat.Msg.Replace(unicodeBytes);
+ _logger.Log(LogType.Warning, $"HoangDev : publicChat {publicChat}");
+ SendProtocol(publicChat);
+ }
+ public void LoadConfigData()
+ {
+ getuiconfig p = new getuiconfig();
+ p.Roleid = m_iCharID;
+ SendProtocol(p);
+ }
+
+ ///
+ /// Save config data to server (sends setuiconfig with compressed config blob).
+ /// 保存配置数据到服务器(发送 setuiconfig 及压缩后的配置数据)。
+ ///
+ public void SaveConfigData(byte[] pBuf, int len)
+ {
+ BMLogger.Log($"[MH] Session.SaveConfigData | len={len}");
+
+ if (pBuf == null || len <= 0) return;
+ var p = new setuiconfig();
+ p.Roleid = m_iCharID;
+ p.Localsid = (int)_localsid;
+ byte[] slice = new byte[len];
+ Buffer.BlockCopy(pBuf, 0, slice, 0, len);
+ p.Ui_config = new Octets(slice);
+
+ // return;
+ SendProtocol(p);
+ }
+
+ private void SetCharacterID(int iCharID)
+ {
+ m_iCharID = iCharID;
+ }
+
+ private void OnPrtcChatMessage(Protocol pProtocol, bool bCalledagain)
+ {
+ chatmessage p = (chatmessage)pProtocol;
+
+ string strTemp = System.Text.Encoding.Unicode.GetString(p.Msg.ToArray(), 0, p.Msg.Length);
+
+ _logger.Log(LogType.Warning, $"HoangDev : OnPrtcChatMessage :{strTemp}");
+ EventBus.Publish(new ChatMessageEvent(strTemp));
+ }
+
+ public struct ChatMessageEvent
+ {
+ public string context;
+
+ public ChatMessageEvent(string context)
+ {
+ this.context = context;
+ }
+ }
+ public void OnPrtcGetConfigRe(Protocol pProtocol)
+ {
+ getuiconfig_re p = (getuiconfig_re)pProtocol;
+ if (p.Result != (int)ErrCode.ERR_SUCCESS)
+ BMLogger.LogError("CECGameSession::OnPrtcGetConfigRe, link return error code of " + p.Result);
+ else
+ {
+ if (!CECGameRun.Instance.LoadConfigsFromServer(p.UiConfig.RawBuffer, p.UiConfig.Size))
+ {
+ // if load failed then use current setting directly
+ //TODO : fix later
+ EC_Game.GetConfigs().ApplyUserSetting();
+ }
+
+ // Now, Get config data request is sent after all host initial data ready.
+ // so when we receive this reply, we can do some last work before game
+ // really starts. Maybe it's not the best place to do these work, but
+ // now we do it here.
+ // Enalbe game UI
+ CECGameUIMan pGameUI = (CECGameUIMan)EC_Game.GetGameRun().GetUIManager().GetInGameUIMan();
+ if (pGameUI != null)
+ {
+ pGameUI.EnableUI(true);
+
+ // Get referral name for adding friend or other display
+ //TODO: a Hung lam phan select role info di
+ /* RoleInfo info = EC_Game.GetGameRun().GetSelectedRoleInfo();
+ if (info.referrer_role > 0)
+ GetPlayerBriefInfo(1, info.referrer_role, 2);*/
+ }
+
+ CECHostPlayer pHost = EC_Game.GetGameRun().GetHostPlayer();
+ pHost.OnAllInitDataReady();
+
+ /* if (pHost.IsGM())
+ {
+ CDlgCountryMap pDlgCountryMap = (CDlgCountryMap)pGameUI.GetDialog("Win_CountryMap");
+ pDlgCountryMap.GetConfig();
+ }
+
+ g_pGame.GetConfigs().ApplyOptimizeSetting();
+
+ if (g_pGame.GetConfigs().IsMiniClient())
+ CECMCDownload::GetInstance().SendGetDownloadOK();*/
+ }
+ }
+ private void OnPrtcPlayerBaseInfoRe(Protocol pProtocol)
+ {
+ playerbaseinfo_re p = (playerbaseinfo_re)pProtocol;
+ BMLogger.Log($"OnPrtcPlayerBaseInfoRe: {p.Roleid} {p.Player.cls} {p.Player.gender}");
+ EC_ManMessage.PostMessage(EC_MsgDef.MSG_PM_PLAYERBASEINFO, MANAGER_INDEX.MAN_PLAYER, -1, p);
+ }
+
+ public void c2s_CmdNPCSevAcceptTask(int idTask, int idStorage, int idRefreshItem)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateCmdNPCSevAcceptTask(idTask, idStorage, idRefreshItem);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdGetAllData(bool byPack, bool byEquip, bool byTask)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+
+ gamedatasend.Data = C2SCommandFactory.CreateGetAllDataCommand(byPack, byEquip, byTask);
+ _logger.Log(LogType.Warning, $"[Dat]- SendCmdGetAllData {byPack},{byEquip},{byTask}");
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdNPCSevHello(int nid)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevHelloDataCommand(nid);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_CmdNormalAttack(byte byPVPMask)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNormalAttackDataCmd(byPVPMask);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdCancelAction()
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(CSNetwork.C2SCommand.CommandID.CANCEL_ACTION);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_CmdUnselect()
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(CSNetwork.C2SCommand.CommandID.UNSELECT);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdSelectTarget(int idTarget)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateSelectTarget(idTarget);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdNPCSevWaypoint()
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevWaypointCmd(NPC_service_type.GP_NPCSEV_WAYPOINT, 0);
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_SendCmdNPCSevMakeItem(int idSkill, int idItem, uint dwCount)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevMakeItemCmd(idSkill, idItem, dwCount);
+ SendProtocol(gamedatasend);
+ }
+ public void GetRoleBaseInfo(int iNumRole, List aRoleIDs)
+ {
+ int iNumLimit = 128;
+ playerbaseinfo p = null;
+ int iCount = 0;
+
+ while (iCount < iNumRole)
+ {
+ p = new();
+ p.Roleid = _selectedRole.roleid;
+
+ int iNumSend = iNumLimit;
+ if (iCount + iNumLimit > iNumRole)
+ iNumSend = iNumRole - iCount;
+
+ if (iNumSend > 0)
+ {
+ p.playerList = new();
+ for (int i = 0; i < iNumSend; i++)
+ p.playerList.Add(aRoleIDs[iCount + i]);
+
+ SendProtocol(p);
+ }
+
+
+ iCount += iNumSend;
+ }
+ }
+
+ public void c2s_SendCmdGetOtherEquip(int iNumID, List aIDs)
+ {
+ // int iNumLimit = 250;
+ // int iCount = 0;
+
+ // while (iCount < iNumID)
+ // {
+ // int iNumSend = iNumLimit;
+ // if (iCount + iNumLimit > iNumID)
+ // iNumSend = iNumID - iCount;
+
+ // if (iNumSend > 0)
+ // {
+ // }
+ // }
+ }
+
+ public void c2s_SendCmdNPCSevAcceptTask(int idTask, int idStorage, int idRefreshItem)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateCmdNPCSevAcceptTask(
+ idTask,
+ idStorage,
+ idRefreshItem);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdNPCSevReturnTask(int idTask, int iChoice)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevReturnTaskCmd(
+ idTask,
+ iChoice);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdNPCSevTaskMatter(int idTask)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevTaskMatterCmd(idTask);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdNPCSevLearnSkill(int idSkill)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevLearnSkillCmd(idSkill);
+ BMLogger.LogError("HoangDev : c2s_SendCmdNPCSevLearnSkill gamedatasend.Data : " + gamedatasend.Data.Size);
+ BMLogger.LogError("HoangDev : c2s_SendCmdNPCSevLearnSkill idSkill : " + idSkill);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdNPCSevBuy(int itemNum, C2SCommand.npc_trade_item[] items)
+ {
+ if (itemNum <= 0 || items == null || items.Length < itemNum)
+ return;
+
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevBuyCmd(itemNum, items);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdNPCSevSell(int itemNum, C2SCommand.npc_sell_item[] items)
+ {
+ if (itemNum <= 0 || items == null || items.Length < itemNum)
+ return;
+
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevSellCmd(itemNum, items);
+ SendProtocol(gamedatasend);
+ }
+
+ public void GetRoleCustomizeData(int iNumRole, List aRoleIDs)
+ {
+ if (iNumRole <= 0 || aRoleIDs == null || aRoleIDs.Count == 0) return;
+
+ int iNumLimit = 240;
+ int iCount = 0;
+
+ while (iCount < iNumRole)
+ {
+ getcustomdata p = new();
+ p.Roleid = _selectedRole.roleid;
+
+ int iNumSend = iNumLimit;
+ if (iCount + iNumLimit > iNumRole)
+ iNumSend = iNumRole - iCount;
+
+ for (int i = 0; i < iNumSend; i++)
+ p.playerlist.Add(aRoleIDs[iCount + i]);
+
+ SendProtocol(p);
+
+ iCount += iNumSend;
+ }
+ }
+ public void c2s_SendCmdEmoteAction(uint wPose)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateEmoteActionCmd((int)wPose);
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_SendCmdTaskNotify(byte[] pData, uint dwDataSize)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateTaskNotifyCmd( pData, dwDataSize);
+ BMLogger.Log($"[MH Task] c2s_SendCmdTaskNotify Command ID : {pData[0]} Size: {dwDataSize}");
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdStandUp()
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.STAND_UP);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdAutoTeamSetGoal(int type, int goal_id, int op)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateAutoTeamSetGoalCommand(type,goal_id, op);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdTeamInvite(int idPlayer)
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateTeamInviteCommand(idPlayer);
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdTeamAgreeInvite(int idLeader, int team_seq)
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateTeamAgreeInviteCommand(idLeader, team_seq);
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdTeamRejectInvite(int idLeader)
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateTeamRejectInviteCommand(idLeader);
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdDuelRequest(int idTarget)
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateDuelRequestCommand(idTarget);
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdDuelReply(bool accept, int idInviter)
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateDuelReplyCommand(accept, idInviter);
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdTeamKickMember(int idMember)
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateTeamKickMemberCommand(idMember);
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdTeamLeaveParty()
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateTeamLeavePartyCommand();
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdTeamDismissParty()
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateTeamDismissPartyCommand();
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdTeamSetPickupFlag(short pickupFlag)
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateTeamSetPickupFlagCommand(pickupFlag);
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdTeamChangeLeader(int idNewLeader)
+ {
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateTeamChangeLeaderCommand(idNewLeader);
+ SendProtocol(g);
+ }
+
+ public void c2s_SendCmdTeamMemberPos(int count, int[] memberIds)
+ {
+ if (memberIds == null || count <= 0 || count > memberIds.Length) return;
+ var g = new gamedatasend();
+ g.Data = C2SCommandFactory.CreateTeamMemberPosCommand(count, memberIds);
+ SendProtocol(g);
+ }
+
+ public void c2s_CmdGoto(float x, float y, float z)
+ {
+ c2s_SendCmdGoto(x, y, z);
+ }
+
+ // Send C2S::GOTO command data
+ void c2s_SendCmdGoto(float x, float y, float z)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateGoToCommed( x, y, z);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdUseItem(byte byPackage, byte bySlot, int tid, byte byCount)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateUseItemCmd(byPackage, bySlot, tid, byCount);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdGetExtProps()
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.GET_EXT_PROP);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdGivePresent(int roleid, int mail_id, int goods_id, int goods_index, int goods_slot)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateGivePresentCmd(roleid, mail_id, goods_id, goods_index, goods_slot);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdEnterSanctuary(int id)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateEnterSanctuaryCmd(id);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdEnterInstance(int iTransIdx, int idInst)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateEnterInstanceCmd(iTransIdx, idInst);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdActiveRushFly(bool bActive)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateActiveRushFlyCmd(bActive);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdPetCtrl(int idTarget, int cmd, byte[] pParamBuf, int iParamLen)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreatePetCtrlCmd(idTarget, cmd, pParamBuf, iParamLen);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdQueryFactionPVPInfo(int faction_id)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateQueryFactionPVPInfo(faction_id);
+ SendProtocol(gamedatasend);
+ }
+
+ public void SendCmdPetCtrl(int idTarget, int cmd, object pParamBuf, int iParamLen)
+ {
+ m_CmdCache.SendCmdPetCtrl(idTarget, cmd, (byte[])pParamBuf, iParamLen);
+ }
+
+ public void c2s_SendCmdPetSummon(int iPetIdx)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreatePetSummon(iPetIdx);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdNPCSevEmbed(ushort wStoneIdx, ushort wEquipIdx, int tidStone, int tidEquip)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevEmbedCmd(wStoneIdx, wEquipIdx, tidStone, tidEquip);
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_SendCmdGetItemInfo(byte byPackage, byte bySlot)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateGetItemInfoCmd(byPackage, bySlot);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdSetStatusPts(int vitality, int energy, int strength, int agility)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateSetStatusPtCmd(vitality, energy, strength, agility);
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_CmdNPCSevClearEmbeddedChip(int iEquipIdx, int tidEquip)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevClearEmbeddedChipCmd(iEquipIdx, tidEquip);
+ SendProtocol(gamedatasend);
+ }
+
+ public void c2s_SendCmdPetRecall()
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(CSNetwork.C2SCommand.CommandID.RECALL_PET);
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_CmdDebug(ushort icmd, int param1 = int.MinValue)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateDebugCmd(icmd, param1);
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_SendCmdNPCSevHatchPet(int iIvtrIdx, int idEgg)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevHatchPetCmd(iIvtrIdx, idEgg);
+ SendProtocol(gamedatasend);
+ }
+ public void c2s_SendCmdNPCSevRestorePet(int iPetIdx)
+ {
+ gamedatasend gamedatasend = new gamedatasend();
+ gamedatasend.Data = C2SCommandFactory.CreateNPCSevRestorePetCmd(iPetIdx);
+ SendProtocol(gamedatasend);
+ }
+
+ // Cross-server get in (C++: c2s_CmdNPCSevCrossServerGetIn) — TODO: implement C2S packet when needed
+ public void c2s_CmdNPCSevCrossServerGetIn()
+ {
+ // TODO: C2SCommandFactory.CreateNPCSevCrossServerGetInCmd() and SendProtocol
+ }
+
+ // Cross-server get out (C++: c2s_CmdNPCSevCrossServerGetOut) — TODO: implement C2S packet when needed
+ public void c2s_CmdNPCSevCrossServerGetOut()
+ {
+ // TODO: C2SCommandFactory.CreateNPCSevCrossServerGetOutCmd() and SendProtocol
+ }
+ }
}
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs
index bc97f42010..25478d19c3 100644
--- a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs
+++ b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs
@@ -589,6 +589,14 @@ namespace BrewMonster.Network
{
Instance._gameSession.c2s_SendCmdTeamInvite(idPlayer);
}
+ public static void c2s_CmdTeamAgreeInvite(int idLeader, int team_seq)
+ {
+ Instance._gameSession.c2s_SendCmdTeamAgreeInvite(idLeader, team_seq);
+ }
+ public static void c2s_CmdTeamRejectInvite(int idLeader)
+ {
+ Instance._gameSession.c2s_SendCmdTeamRejectInvite(idLeader);
+ }
public static void c2s_CmdDuelRequest(int idTarget)
{
Instance._gameSession.c2s_SendCmdDuelRequest(idTarget);
diff --git a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs
index a213c693be..521fdd7c8d 100644
--- a/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs
+++ b/Assets/PerfectWorld/Scripts/Objet/Shortcut/CECShortcutSet.cs
@@ -22,7 +22,6 @@ using CSNetwork.GPDataType;
using CSNetwork.S2CCommand;
using System;
using System.Collections.Generic;
-using Unity.VisualScripting;
using UnityEngine;
using static BrewMonster.EC_Resource;
using static BrewMonster.IconResourceType;
diff --git a/Assets/PerfectWorld/Scripts/Skills/CECSCSkill.cs b/Assets/PerfectWorld/Scripts/Skills/CECSCSkill.cs
index 9714ea4f15..39d8402f47 100644
--- a/Assets/PerfectWorld/Scripts/Skills/CECSCSkill.cs
+++ b/Assets/PerfectWorld/Scripts/Skills/CECSCSkill.cs
@@ -5,7 +5,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using Unity.VisualScripting;
using static BrewMonster.SkillArrayWrapper;
namespace BrewMonster
diff --git a/Assets/PerfectWorld/Scripts/Skills/EC_HostSkillModel.cs b/Assets/PerfectWorld/Scripts/Skills/EC_HostSkillModel.cs
index f2f9669010..f6519ebb43 100644
--- a/Assets/PerfectWorld/Scripts/Skills/EC_HostSkillModel.cs
+++ b/Assets/PerfectWorld/Scripts/Skills/EC_HostSkillModel.cs
@@ -76,7 +76,7 @@ namespace BrewMonster.Scripts.Skills
public void SendHelloToSkillLearnNPC()
{
- //BMLogger.LogError($"[Skill] Sent SEVNPC_HELLO to skill-learn NPC nid={m_skillLearnNPCNID}");
+ BMLogger.LogError($"[Skill] Sent SEVNPC_HELLO to skill-learn NPC nid={m_skillLearnNPCNID}");
if (m_skillLearnNPCNID != 0)
{
diff --git a/Assets/PerfectWorld/Scripts/Skills/ElementSkill.cs b/Assets/PerfectWorld/Scripts/Skills/ElementSkill.cs
index 2f24ba1bc2..803301005d 100644
--- a/Assets/PerfectWorld/Scripts/Skills/ElementSkill.cs
+++ b/Assets/PerfectWorld/Scripts/Skills/ElementSkill.cs
@@ -4,7 +4,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
-using Unity.VisualScripting;
namespace BrewMonster.Scripts.Skills
{
diff --git a/Assets/PerfectWorld/Scripts/Skills/skill.cs b/Assets/PerfectWorld/Scripts/Skills/skill.cs
index 6ad1855d9f..52f6289f41 100644
--- a/Assets/PerfectWorld/Scripts/Skills/skill.cs
+++ b/Assets/PerfectWorld/Scripts/Skills/skill.cs
@@ -58,6 +58,13 @@ namespace BrewMonster.Scripts.Skills
return (int)tmp;
}
public override int GetItemCost() { return stub.itemcost; }
+ public override bool ValidWeapon(int idWeapon) { return stub.ValidWeapon(idWeapon); }
+ public override int GetMpCost() { return (int)stub.GetMpcost(this); }
+ public override bool IsAllowLand() { return stub.allow_land; }
+ public override bool IsAllowWater() { return stub.allow_water; }
+ public override bool IsAllowAir() { return stub.allow_air; }
+ public override int GetArrowCost() { return stub.arrowcost; }
+ public override bool GetNotuseInCombat() { return stub.notuse_in_combat; }
public int GetLevel() { return (int)level; }
public PlayerWrapper GetPlayer()
diff --git a/Assets/PerfectWorld/Scripts/Task/TaskTemplContainerSO.cs b/Assets/PerfectWorld/Scripts/Task/TaskTemplContainerSO.cs
index ca680cf261..de231005e8 100644
--- a/Assets/PerfectWorld/Scripts/Task/TaskTemplContainerSO.cs
+++ b/Assets/PerfectWorld/Scripts/Task/TaskTemplContainerSO.cs
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
-using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Serialization;
diff --git a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs
index f0d1f7deac..15e287798d 100644
--- a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs
+++ b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs
@@ -17,7 +17,6 @@ using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using TMPro;
-using Unity.VisualScripting;
namespace BrewMonster.Scripts.Task.UI
{
diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs
index 7d233e6754..7d3f70bb4e 100644
--- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs
+++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgInstall.cs
@@ -1,14 +1,9 @@
using BrewMonster.Network;
using BrewMonster.Scripts.Managers;
-using BrewMonster.Scripts.Task;
using BrewMonster.UI;
-using CSNetwork;
-using ModelRenderer.Scripts.Common;
using PerfectWorld.Scripts.Managers;
-using PerfectWorld.Scripts.Task;
using System;
using System.Collections.Generic;
-using System.Text;
using BrewMonster.Scripts;
using TMPro;
using UnityEngine;
@@ -25,23 +20,26 @@ namespace BrewMonster
Disenchase
}
- [Header("Mode")] [SerializeField] private InstallMode m_Mode = InstallMode.Enchase;
+ [Header("Mode")][SerializeField] private InstallMode m_Mode = InstallMode.Enchase;
- [Header("Slot First")] [SerializeField]
+ [Header("Slot First")]
+ [SerializeField]
private Transform m_SlotFirstParent;
[SerializeField] private TextMeshProUGUI m_TxtFirstName;
- [Header("Slot Second")] [SerializeField]
- private Transform m_SlotSecondlParent;
+ [Header("Slot Second")]
+ [SerializeField]
+ private Transform m_SlotSecondParent;
[SerializeField] private TextMeshProUGUI m_TxtSecondName;
- [Header("Buttons and Money")] [SerializeField]
+ [Header("Buttons and Money")]
+ [SerializeField]
private TextMeshProUGUI m_TxtMoney;
-
[SerializeField] private Button m_BtnMergeOrReset;
[SerializeField] private Button m_BtnCancel;
+ [SerializeField] private Button m_BtnClose;
[SerializeField] private Sprite khung_item;
[SerializeField] private Transform itemInventoryRoot;
@@ -63,10 +61,10 @@ namespace BrewMonster
RegisterDrop(m_SlotFirstParent, OnDropEquip);
RegisterClick(m_SlotFirstParent, OnClickEquipSlot);
- if (m_Mode == InstallMode.Enchase && m_SlotSecondlParent != null)
+ if (m_Mode == InstallMode.Enchase && m_SlotSecondParent != null)
{
- RegisterDrop(m_SlotSecondlParent, OnDropMaterial);
- RegisterClick(m_SlotSecondlParent, OnClickMaterialSlot);
+ RegisterDrop(m_SlotSecondParent, OnDropMaterial);
+ RegisterClick(m_SlotSecondParent, OnClickMaterialSlot);
}
}
@@ -91,23 +89,21 @@ namespace BrewMonster
//todo need to set from other class
// SetName("Win_Enchase");
m_BtnMergeOrReset.onClick.AddListener(OnClickedMergeOrReset);
- m_BtnCancel.onClick.AddListener(OnClickedCancel);
+ m_BtnCancel.onClick.AddListener(OnCommandCancel);
+ m_BtnClose.onClick.AddListener(OnCommandCancel);
m_install_price = -1;
- if (m_SlotSecondlParent != null)
- m_SlotSecondlParent.gameObject.SetActive(m_Mode == InstallMode.Enchase);
+ if (m_SlotSecondParent != null)
+ m_SlotSecondParent.gameObject.SetActive(m_Mode == InstallMode.Enchase);
+ ClearEquiment();
+ ClearStone();
}
public override void OnDisable()
{
base.OnDisable();
m_BtnMergeOrReset.onClick.RemoveListener(OnClickedMergeOrReset);
- m_BtnCancel.onClick.RemoveListener(OnClickedCancel);
- }
-
- public void CloseInstall()
- {
- gameObject.SetActive(false);
- RestoreInventoryColors();
+ m_BtnCancel.onClick.RemoveListener(OnCommandCancel);
+ m_BtnClose.onClick.RemoveListener(OnCommandCancel);
}
private void RestoreInventoryColors()
@@ -190,7 +186,7 @@ namespace BrewMonster
if (m_SelectedEquip != null)
{
ReturnItemToInventory(m_FirstInvSlot);
- ClearEquipSlot();
+ ClearEquiment();
}
}
@@ -199,7 +195,7 @@ namespace BrewMonster
if (m_SelectedMaterial != null)
{
ReturnItemToInventory(m_SecondInvSlot);
- ClearMaterialSlot();
+ ClearStone();
}
}
@@ -242,6 +238,9 @@ namespace BrewMonster
if (item == null)
return;
+ if(!item.IsEquipment())
+ return;
+
EC_IvtrItem detailedItem = EC_IvtrItem.CreateItem(item.m_tid, item.m_expire_date, item.m_iCount);
if (item.Content != null && item.Content.Length > 0)
detailedItem.SetItemInfo(item.Content, item.Content.Length);
@@ -283,6 +282,9 @@ namespace BrewMonster
if (item == null)
return;
+ if (item.GetClassID() != (int)EC_IvtrEquip.EQUIP_CLASS_ID.ICID_STONE)
+ return;
+
EC_IvtrItem detailedItem = EC_IvtrItem.CreateItem(item.m_tid, item.m_expire_date, item.m_iCount);
if (item.Content != null && item.Content.Length > 0)
detailedItem.SetItemInfo(item.Content, item.Content.Length);
@@ -301,7 +303,7 @@ namespace BrewMonster
m_SecondInvSlot = slotIndex;
m_TxtSecondName.text = detailedItem.GetName();
- SetSlotIcon(m_SlotSecondlParent, detailedItem);
+ SetSlotIcon(m_SlotSecondParent, detailedItem);
SetInventorySlotGray(btn, true);
@@ -359,9 +361,10 @@ namespace BrewMonster
img.sprite = EC_IvtrItemUtils.Instance.ResolveItemIconSprite(item.m_tid);
img.enabled = img.sprite != null;
-
img.color = Color.white;
img.SetNativeSize();
+
+ // GetGameUIMan()?.PlayItemSound(item, true);
}
private void ReturnItemToInventory(int slotIndex)
@@ -373,7 +376,7 @@ namespace BrewMonster
SetInventorySlotGray(btn, false);
}
- private void ClearEquipSlot()
+ private void ClearEquiment()
{
if (m_FirstInvSlot >= 0)
{
@@ -392,7 +395,7 @@ namespace BrewMonster
}
}
- private void ClearMaterialSlot()
+ private void ClearStone()
{
if (m_SecondInvSlot >= 0)
{
@@ -403,7 +406,7 @@ namespace BrewMonster
m_SelectedMaterial = null;
m_SecondInvSlot = -1;
m_TxtSecondName.text = "___";
- ClearSlotIcon(m_SlotSecondlParent);
+ ClearSlotIcon(m_SlotSecondParent);
m_TxtMoney.text = "0";
m_install_price = -1;
}
@@ -447,76 +450,76 @@ namespace BrewMonster
});
return;
}
+
EC_IvtrEquip pEquipA = (EC_IvtrEquip)pIvtrA;
if (pHost != null && m_Mode == InstallMode.Enchase)
{
- if (m_Mode == InstallMode.Enchase)
+ if (pEquipA.GetEmptyHoleNum() <= 0)
{
- if (pEquipA.GetEmptyHoleNum() <= 0)
- {
- message = GetGameUIMan().GetStringFromTable(224);
- CECUIManager.Instance.ShowMessageBox(new MessageBoxData()
- {
- Message = message,
- Dlg = this
- });
- return;
- }
-
- EC_IvtrItem pIvtrB = m_SelectedMaterial;
- if (pIvtrB == null || !pIvtrB.IsEmbeddable())
- {
- message = GetGameUIMan().GetStringFromTable(225);
- CECUIManager.Instance.ShowMessageBox(new MessageBoxData()
- {
- Message = message,
- Dlg = this
- });
- return;
- }
-
- if (pIvtrB.GetClassID() != (int)EC_IvtrEquip.EQUIP_CLASS_ID.ICID_STONE)
- return;
-
- int nStoneLevel = ((EC_IvtrStone)pIvtrB).GetDBEssence().level;
- int nEquipLevel = -1;
- switch (pEquipA.GetClassID())
- {
- case (int)EC_IvtrEquip.EQUIP_CLASS_ID.ICID_WEAPON:
- nEquipLevel = ((CECIvtrWeapon)pEquipA).GetDBEssence().level;
- break;
- case (int)EC_IvtrEquip.EQUIP_CLASS_ID.ICID_ARMOR:
- nEquipLevel = ((EC_IvtrArmor)pEquipA).GetDBEssence().level;
- break;
- case (int)EC_IvtrEquip.EQUIP_CLASS_ID.ICID_DECORATION:
- nEquipLevel = ((EC_IvtrDecoration)pEquipA).GetDBEssence().level;
- break;
- }
-
- if (nStoneLevel > nEquipLevel)
- {
- message = GetGameUIMan().GetStringFromTable(300);
- CECUIManager.Instance.ShowMessageBox(new MessageBoxData()
- {
- Message = message,
- Dlg = this
- });
- return;
- }
-
- //pr
- UnityGameSession.c2s_CmdNPCSevEmbed(
- (ushort)m_SecondInvSlot, (ushort)m_FirstInvSlot,
- pIvtrB.GetTemplateID(), pIvtrA.GetTemplateID());
- pHost.GetPack(InventoryConst.IVTRTYPE_PACK).UnfreezeAllItems();
-
- message = GetGameUIMan().GetStringFromTable(228);
+ message = GetGameUIMan().GetStringFromTable(224);
CECUIManager.Instance.ShowMessageBox(new MessageBoxData()
{
Message = message,
Dlg = this
});
+ return;
}
+
+ EC_IvtrItem pIvtrB = m_SelectedMaterial;
+ if (pIvtrB == null || !pIvtrB.IsEmbeddable())
+ {
+ message = GetGameUIMan().GetStringFromTable(225);
+ CECUIManager.Instance.ShowMessageBox(new MessageBoxData()
+ {
+ Message = message,
+ Dlg = this
+ });
+ return;
+ }
+
+ if (pIvtrB.GetClassID() != (int)EC_IvtrEquip.EQUIP_CLASS_ID.ICID_STONE)
+ return;
+
+ int nStoneLevel = ((EC_IvtrStone)pIvtrB).GetDBEssence().level;
+ int nEquipLevel = -1;
+ switch (pEquipA.GetClassID())
+ {
+ case (int)EC_IvtrEquip.EQUIP_CLASS_ID.ICID_WEAPON:
+ nEquipLevel = ((CECIvtrWeapon)pEquipA).GetDBEssence().level;
+ break;
+ case (int)EC_IvtrEquip.EQUIP_CLASS_ID.ICID_ARMOR:
+ nEquipLevel = ((EC_IvtrArmor)pEquipA).GetDBEssence().level;
+ break;
+ case (int)EC_IvtrEquip.EQUIP_CLASS_ID.ICID_DECORATION:
+ nEquipLevel = ((EC_IvtrDecoration)pEquipA).GetDBEssence().level;
+ break;
+ }
+
+ if (nStoneLevel > nEquipLevel)
+ {
+ message = GetGameUIMan().GetStringFromTable(300);
+ CECUIManager.Instance.ShowMessageBox(new MessageBoxData()
+ {
+ Message = message,
+ Dlg = this
+ });
+ return;
+ }
+
+ //pr
+ UnityGameSession.c2s_CmdNPCSevEmbed(
+ (ushort)m_SecondInvSlot, (ushort)m_FirstInvSlot,
+ pIvtrB.GetTemplateID(), pIvtrA.GetTemplateID());
+ ClearEquiment();
+ ClearStone();
+ pHost.GetPack(InventoryConst.IVTRTYPE_PACK).UnfreezeAllItems();
+
+ message = GetGameUIMan().GetStringFromTable(228);
+ CECUIManager.Instance.ShowMessageBox(new MessageBoxData()
+ {
+ Message = message,
+ Dlg = this
+ });
}
else if (pHost != null && m_Mode == InstallMode.Disenchase)
{
@@ -536,7 +539,20 @@ namespace BrewMonster
{
Message = message,
Dlg = this,
- MessageBoxType = MessageBoxType.BothYesNoButton
+ MessageBoxType = MessageBoxType.BothYesNoButton,
+ OnClickedYes = () =>
+ {
+ UnityGameSession.c2s_CmdNPCSevClearEmbeddedChip((ushort)m_FirstInvSlot, pIvtrA.GetTemplateID());
+ ClearEquiment();
+ pHost.GetPack(InventoryConst.IVTRTYPE_PACK).UnfreezeAllItems();
+
+ string successMessage = GetGameUIMan().GetStringFromTable(230);
+ CECUIManager.Instance.ShowMessageBox(new MessageBoxData()
+ {
+ Message = successMessage,
+ Dlg = this
+ });
+ }
};
CECUIManager.Instance.ShowMessageBox(x);
}
@@ -546,35 +562,37 @@ namespace BrewMonster
}
}
- private void OnClickedCancel()
+ private void OnCommandCancel()
{
- Show(false);
- }
+ m_SelectedEquip?.Freeze(false);
+ m_SelectedMaterial?.Freeze(false);
- public void ResetInstallUI()
- {
RestoreInventoryColors();
m_SelectedEquip = null;
- if (m_Mode == InstallMode.Enchase)
- {
- m_SelectedMaterial = null;
- m_SecondInvSlot = -1;
- m_TxtSecondName.text = "___";
- ClearSlotIcon(m_SlotSecondlParent);
- }
-
- m_FirstInvSlot = -1;
+ m_SelectedMaterial = null;
m_TxtFirstName.text = "___";
m_TxtMoney.text = "0";
- m_install_price = -1;
+
+ if (m_Mode == InstallMode.Enchase)
+ m_TxtSecondName.text = "___";
ClearSlotIcon(m_SlotFirstParent);
+ if (m_Mode == InstallMode.Enchase)
+ {
+ ClearSlotIcon(m_SlotSecondParent);
+ }
+ m_install_price = -1;
+
+ var host = GetHostPlayer();
+ host?.EndNPCService();
+ host?.GetPack(InventoryConst.IVTRTYPE_PACK).UnfreezeAllItems();
gameObject.SetActive(false);
}
+
private void CheckHidePanel(Vector2 screenPos)
{
if (!RectTransformUtility.RectangleContainsScreenPoint(
@@ -596,7 +614,7 @@ namespace BrewMonster
//check if material is stone and show price to merge
if (m_Mode == InstallMode.Enchase)
{
- if (m_SelectedMaterial != null)
+ if (m_SelectedMaterial != null && m_SelectedMaterial is EC_IvtrStone)
{
stone = (EC_IvtrStone)m_SelectedMaterial;
pEssence = stone.GetDBEssence();
@@ -606,6 +624,7 @@ namespace BrewMonster
}
else
{
+ m_install_price = 0;
m_TxtMoney.text = $"{0}";
}
}
@@ -622,12 +641,15 @@ namespace BrewMonster
stone = (EC_IvtrStone)EC_IvtrItem.CreateItem(idItem, 0, 1);
pEssence = stone.GetDBEssence();
nAmount += pEssence.uninstall_price;
+ stone = null;
}
+ m_install_price = nAmount;
m_TxtMoney.text = $"{nAmount}";
}
else
{
+ m_install_price = 0;
m_TxtMoney.text = $"{0}";
}
}
diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPetHatch.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPetHatch.cs
index 764f13fcc1..0f8c64ebf7 100644
--- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPetHatch.cs
+++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPetHatch.cs
@@ -529,7 +529,6 @@ namespace BrewMonster.UI
{
pItem.Freeze(false);
GetHostPlayer().HatchPet(m_nSlot);
- Debug.LogError("m_nSlot = " + m_nSlot);
SetDataPtr(null, "");
GetGameUIMan().EndNPCService();
Show(false);
diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPlayerOptions.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPlayerOptions.cs
index c1790a831d..1f2a8c2b04 100644
--- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPlayerOptions.cs
+++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgPlayerOptions.cs
@@ -58,32 +58,38 @@ namespace BrewMonster.UI
void OnViewInfo(int characterId)
{
+ Debug.Log("OnViewInfo: " + characterId);
var list = new List { characterId };
UnityGameSession.GetRoleBaseInfo(1, list);
}
void OnTeamInvite(int characterId)
{
+ Debug.Log("OnTeamInvite: " + characterId);
UnityGameSession.c2s_CmdTeamInvite(characterId);
}
void OnTrade(int characterId)
{
- // TODO: c2s trade request when available
+ Debug.Log("OnTrade: " + characterId);
+ // TODO: c2s trade request when availableP
}
void OnAddFriend(int characterId)
{
+ Debug.Log("OnAddFriend: " + characterId);
// TODO: c2s add friend when available
}
void OnDuel(int characterId)
{
+ Debug.Log("OnDuel: " + characterId);
UnityGameSession.c2s_CmdDuelRequest(characterId);
}
void OnWhisper(int characterId)
{
+ Debug.Log("OnWhisper: " + characterId);
// TODO: open whisper/chat input with target when available
}
diff --git a/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs b/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs
index 7da4b64317..46893d7741 100644
--- a/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs
+++ b/Assets/PerfectWorld/Scripts/UI/DlgAward/CDlgAward.cs
@@ -50,6 +50,14 @@ namespace BrewMonster.Scripts.UI
itemInfoPanel.transform.GetChild(0).gameObject.SetActive(false);
m_pBtn_Confirm.onClick.AddListener(OnCommand_confirm);
}
+ void OnEnable()
+ {
+ // Refresh to toggle state.
+ foreach (var toggle in _radioButtons)
+ {
+ toggle.isOn = false;
+ }
+ }
private void InitRadioBtns()
{
diff --git a/Assets/PerfectWorld/Scripts/UI/GamePlay/AUIImagePicture.cs b/Assets/PerfectWorld/Scripts/UI/GamePlay/AUIImagePicture.cs
index 7933bb173b..786d055af6 100644
--- a/Assets/PerfectWorld/Scripts/UI/GamePlay/AUIImagePicture.cs
+++ b/Assets/PerfectWorld/Scripts/UI/GamePlay/AUIImagePicture.cs
@@ -5,7 +5,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
diff --git a/Assets/PerfectWorld/Scripts/UI/GamePlay/CdlgQuickBar.cs b/Assets/PerfectWorld/Scripts/UI/GamePlay/CdlgQuickBar.cs
index b80a4f6478..1170c554de 100644
--- a/Assets/PerfectWorld/Scripts/UI/GamePlay/CdlgQuickBar.cs
+++ b/Assets/PerfectWorld/Scripts/UI/GamePlay/CdlgQuickBar.cs
@@ -134,6 +134,7 @@ namespace BrewMonster
}
else
{
+ //BMLogger.LogError("HoangDev: QuickBar Skill CoolTime: " + (uint)pSkill.GetSkillID() + " : " + ElementSkill.GetIcon((uint)pSkill.GetSkillID()) + " CoolTime: " + pSkill.GetCoolingTime() + " CoolCnt: " + pSkill.GetCoolingCnt());
pClock.SetProgressPos(pSkill.GetCoolingTime() - pSkill.GetCoolingCnt());
}
}
diff --git a/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs b/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs
index 3b2b782b2b..c9b184ae43 100644
--- a/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs
+++ b/Assets/PerfectWorld/Scripts/UI/GamePlay/SkillUI/CDlgSkillSubListItem.cs
@@ -1,4 +1,5 @@
using BrewMonster.Assets.PerfectWorld.Scripts.UI.GamePlay;
+using BrewMonster.Network;
using BrewMonster.Scripts.Skills;
using BrewMonster.UI;
using CSNetwork.GPDataType;
@@ -56,7 +57,7 @@ namespace BrewMonster
{
uiManager.ShowMessageBox(new MessageBoxData()
{
- Title = "MessageBox",
+ Title = "MessageBox",
Message = gameUIMan.GetStringFromTable(11327)
});
}
@@ -103,8 +104,9 @@ namespace BrewMonster
string str = GPDataTypeHelper.ReplacePercentD(GetStringFromTable(11326), needMoney, needSp);
var messagebox = uiManager.ShowMessageBox(new MessageBoxData()
{
- Title = "Game_LearnSkill",
+ Title = "Game_LearnSkill",
Message = str,
+ OnClickedYes = () => UnityGameSession.c2s_SendCmdNPCSevLearnSkill(m_skillID)
});
messagebox.SetData((uint)m_skillID);
//GetGameUIMan()->MessageBox("Game_LearnSkill", str, //GetGameUIMan()->GetStringFromTable(231),
diff --git a/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs b/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs
index 3a9d99b31d..a28e363118 100644
--- a/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs
+++ b/Assets/PerfectWorld/Scripts/UI/HUDNPC.cs
@@ -1,16 +1,48 @@
using TMPro;
using UnityEngine;
using UnityEngine.UI;
+using BrewMonster.Network;
+using CSNetwork.GPDataType;
namespace BrewMonster
{
public class HUDNPC : MonoBehaviour
{
+ [SerializeField] private Button _NPCIconBtn;
[SerializeField] private TextMeshProUGUI _healthText;
[SerializeField] private TextMeshProUGUI _nameText;
[SerializeField] private TextMeshProUGUI _statText;
[SerializeField] private Image healthImage;
+ private void OnEnable()
+ {
+ if (_NPCIconBtn != null)
+ {
+ _NPCIconBtn.onClick.AddListener(OnNPCIconBtnClick);
+ }
+ }
+
+ private void OnDisable()
+ {
+ if (_NPCIconBtn != null)
+ {
+ _NPCIconBtn.onClick.RemoveListener(OnNPCIconBtnClick);
+ }
+ }
+
+ private void OnNPCIconBtnClick()
+ {
+ var host = EC_Game.GetGameRun()?.GetHostPlayer();
+ if (host == null)
+ return;
+
+ int id = host.GetSelectedTarget();
+ if (id == 0 || id == host.GetCharacterID() || !GPDataTypeHelper.ISPLAYERID(id))
+ return;
+ CECUIManager.Instance?.ShowPlayerOptionsDialog(id, _NPCIconBtn.transform.position);
+
+ }
+
public void SetText(string healthText, string nameText, string statText)
{
_healthText.text = healthText;
diff --git a/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs b/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs
index 77b03ff6c6..e713b22a5a 100644
--- a/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs
+++ b/Assets/PerfectWorld/Scripts/UI/HUDPlayer.cs
@@ -5,7 +5,7 @@ using CSNetwork.GPDataType;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
-
+using System.Collections.Generic;
namespace BrewMonster
{
public class HUDPlayer : MonoBehaviour
@@ -15,9 +15,12 @@ namespace BrewMonster
public TextMeshProUGUI expText;
public TextMeshProUGUI nameText;
public TextMeshProUGUI levelText;
+ public TextMeshProUGUI spText;
public Image healthImage;
public Image manaImage;
public Image expImage;
+ public Image apImage;
+ public List apToggles;
[Tooltip("Optional. Assign to make this area open the character dialog on click. If unset, nothing opens.")]
[SerializeField] private Button m_btnOpenCharacter;
@@ -30,6 +33,8 @@ namespace BrewMonster
EventBus.Subscribe(UpdateNeededExp);
if (m_btnOpenCharacter != null)
m_btnOpenCharacter.onClick.AddListener(OnOpenCharacterClick);
+
+
}
private void OnDestroy()
@@ -55,9 +60,27 @@ namespace BrewMonster
manaText.text = $"{obj.iMP}/{obj.iMaxMP}";
expText.text = $"{((float)obj.iExp/neededExp)*100}%";
levelText.text = $"{obj.sLevel}";
+ spText.text = $"{obj.iAP%100}/100";
healthImage.fillAmount = (float)obj.iHP / (float)obj.iMaxHP;
manaImage.fillAmount = (float)obj.iMP / (float)obj.iMaxMP;
expImage.fillAmount = (float)obj.iExp / (float)neededExp;
+ apImage.fillAmount = (float)(obj.iAP%100) / (float)100;
+
+ int curAP = obj.iAP/100;
+ int maxAP = obj.iMaxAP/100;
+
+ for (int i = 0; i < apToggles.Count; i++)
+ {
+ if(i < maxAP)
+ {
+ apToggles[i].gameObject.SetActive(true);
+ apToggles[i].isOn = i < curAP;
+ }
+ else
+ {
+ apToggles[i].gameObject.SetActive(false);
+ }
+ }
}
private void OnOpenCharacterClick()
diff --git a/Assets/PerfectWorld/Scripts/UI/NPCShopDetailPanel.cs b/Assets/PerfectWorld/Scripts/UI/NPCShopDetailPanel.cs
index 80e2d2c712..0955fa0986 100644
--- a/Assets/PerfectWorld/Scripts/UI/NPCShopDetailPanel.cs
+++ b/Assets/PerfectWorld/Scripts/UI/NPCShopDetailPanel.cs
@@ -24,6 +24,7 @@ public class NPCShopDetailPanel : MonoBehaviour
private GShopItem currentItem;
private NPCShopUIManager shopManager;
+ private int shopItemIndex;
void Start()
{
@@ -39,10 +40,11 @@ public class NPCShopDetailPanel : MonoBehaviour
buyButton.onClick.AddListener(OnBuyButtonClicked);
}
- public void SetupDetailPanel(GShopItem item, NPCShopUIManager manager)
+ public void SetupDetailPanel(GShopItem item, NPCShopUIManager manager, int index)
{
currentItem = item;
shopManager = manager;
+ shopItemIndex = index;
UpdateDisplay();
}
@@ -189,17 +191,19 @@ public class NPCShopDetailPanel : MonoBehaviour
}
}
- // Create npc_trade_item array for buying from NPC
- // The tid is the item template ID, index is shop item index (0 for now), count is quantity to buy
+ // Server requires SEVNPC_HELLO with NPC id before buy, and the correct shop slot index
+ if (shopManager != null && shopManager.CurrentNPCID != 0)
+ UnityGameSession.c2s_CmdNPCSevHello((int)shopManager.CurrentNPCID);
+
+ // Create npc_trade_item: tid = template ID, index = shop slot (server validates this), count = quantity
npc_trade_item[] items = new npc_trade_item[1];
items[0] = new npc_trade_item
{
tid = (int)currentItem.id,
- index = 0, // Shop item index - may need to be determined from shop item position
- count = 1 // Quantity to buy
+ index = (uint)shopItemIndex,
+ count = 1
};
- // Send the buy command
UnityGameSession.c2s_CmdNPCSevBuy(1, items);
Debug.Log($"[NPCShopDetailPanel] Sent buy command for item {currentItem.id}, price {price}");
diff --git a/Assets/PerfectWorld/Scripts/UI/NPCShopItemPanel.cs b/Assets/PerfectWorld/Scripts/UI/NPCShopItemPanel.cs
index 5ccd57d557..e112a3e4ea 100644
--- a/Assets/PerfectWorld/Scripts/UI/NPCShopItemPanel.cs
+++ b/Assets/PerfectWorld/Scripts/UI/NPCShopItemPanel.cs
@@ -19,6 +19,7 @@ public class NPCShopItemPanel : MonoBehaviour
private GShopItem itemData;
private Coroutine iconLoadCoroutine;
private NPCShopUIManager shopManager;
+ private int shopItemIndex;
void Start()
{
@@ -54,10 +55,11 @@ public class NPCShopItemPanel : MonoBehaviour
}
}
- public void SetupItem(GShopItem item, NPCShopUIManager manager)
+ public void SetupItem(GShopItem item, NPCShopUIManager manager, int index)
{
itemData = item;
shopManager = manager;
+ shopItemIndex = index;
UpdateDisplay();
}
@@ -65,7 +67,7 @@ public class NPCShopItemPanel : MonoBehaviour
{
if (shopManager != null && itemData.id != 0)
{
- shopManager.ShowItemDetail(itemData);
+ shopManager.ShowItemDetail(itemData, shopItemIndex);
}
}
diff --git a/Assets/PerfectWorld/Scripts/UI/NPCShopUIManager.cs b/Assets/PerfectWorld/Scripts/UI/NPCShopUIManager.cs
index 4c61a35673..d12ff02f9b 100644
--- a/Assets/PerfectWorld/Scripts/UI/NPCShopUIManager.cs
+++ b/Assets/PerfectWorld/Scripts/UI/NPCShopUIManager.cs
@@ -35,6 +35,9 @@ public class NPCShopUIManager : MonoBehaviour
private int currentTabIndex = 0;
private uint currentNPCID = 0;
private NPC_SELL_SERVICE? cachedSellService = null;
+
+ /// Current NPC id for this shop session. Send SEVNPC_HELLO with this before buy.
+ public uint CurrentNPCID => currentNPCID;
private NPCShopDetailPanel detailPanelScript;
void Start()
@@ -278,8 +281,9 @@ public class NPCShopUIManager : MonoBehaviour
if (elementDataMan == null)
return;
- foreach (var good in page.goods)
+ for (int i = 0; i < page.goods.Length; i++)
{
+ var good = page.goods[i];
if (good.id == 0)
continue;
@@ -293,8 +297,8 @@ public class NPCShopUIManager : MonoBehaviour
// Create GShopItem
GShopItem shopItem = CreateShopItemFromGood(good, itemData, itemDataType);
- // Create panel
- CreateItemPanel(shopItem);
+ // Create panel with shop slot index (server expects this in npc_trade_item.index)
+ CreateItemPanel(shopItem, i);
}
}
}
@@ -372,7 +376,7 @@ public class NPCShopUIManager : MonoBehaviour
return shopItem;
}
- void CreateItemPanel(GShopItem item)
+ void CreateItemPanel(GShopItem item, int shopItemIndex)
{
if (itemPanelPrefab == null || itemContainer == null)
return;
@@ -386,7 +390,7 @@ public class NPCShopUIManager : MonoBehaviour
if (itemPanelScript != null)
{
- itemPanelScript.SetupItem(item, this);
+ itemPanelScript.SetupItem(item, this, shopItemIndex);
}
else
{
@@ -406,7 +410,7 @@ public class NPCShopUIManager : MonoBehaviour
currentItemPanels.Clear();
}
- public void ShowItemDetail(GShopItem item)
+ public void ShowItemDetail(GShopItem item, int shopItemIndex)
{
if (item.id == 0)
return;
@@ -428,7 +432,7 @@ public class NPCShopUIManager : MonoBehaviour
if (detailPanelScript != null)
{
npcShopDetailPanel.SetActive(true);
- detailPanelScript.SetupDetailPanel(item, this);
+ detailPanelScript.SetupDetailPanel(item, this, shopItemIndex);
}
else
{
diff --git a/Assets/PerfectWorld/Scripts/UI/ShopDetailPanel.cs b/Assets/PerfectWorld/Scripts/UI/ShopDetailPanel.cs
index f351d1ba91..2ae252e81c 100644
--- a/Assets/PerfectWorld/Scripts/UI/ShopDetailPanel.cs
+++ b/Assets/PerfectWorld/Scripts/UI/ShopDetailPanel.cs
@@ -3,7 +3,6 @@ using NUnit.Framework;
using System;
using System.Collections.Generic;
using TMPro;
-using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
diff --git a/Assets/PerfectWorld/Scripts/Vfx/CGfxOnTargetMove.cs b/Assets/PerfectWorld/Scripts/Vfx/CGfxOnTargetMove.cs
index 81b212d006..2a3036d451 100644
--- a/Assets/PerfectWorld/Scripts/Vfx/CGfxOnTargetMove.cs
+++ b/Assets/PerfectWorld/Scripts/Vfx/CGfxOnTargetMove.cs
@@ -24,7 +24,6 @@ namespace BrewMonster
///
public override void StartMove(Vector3 vHost, Vector3 vTarget)
{
- BMLogger.LogError($"[SKILL_GFX_DEBUG] CGfxOnTargetMove.StartMove: Entry - host={vHost}, target={vTarget}, cluster={m_bOneOfCluser}, radius={m_fRadius}");
m_vPos = vTarget;
m_vMoveDir = vTarget - vHost;
@@ -32,7 +31,6 @@ namespace BrewMonster
if (Normalize(ref m_vMoveDir) == 0)
{
m_vMoveDir = Vector3.forward; // _unit_z
- BMLogger.LogError($"[SKILL_GFX_DEBUG] CGfxOnTargetMove.StartMove: MoveDir was zero, using forward");
}
if (m_bOneOfCluser)
@@ -43,15 +41,12 @@ namespace BrewMonster
m_vOffset.z = Mathf.Sin(fRandAng) * fRadius;
m_vOffset.y = 0;
m_vPos += m_vOffset;
- BMLogger.LogError($"[SKILL_GFX_DEBUG] CGfxOnTargetMove.StartMove: Cluster offset applied - offset={m_vOffset}, finalPos={m_vPos}");
}
else
{
m_vOffset = Vector3.zero;
- BMLogger.LogError($"[SKILL_GFX_DEBUG] CGfxOnTargetMove.StartMove: No cluster offset, pos={m_vPos}");
}
- BMLogger.LogError($"[SKILL_GFX_DEBUG] CGfxOnTargetMove.StartMove: Complete - pos={m_vPos}, dir={m_vMoveDir}");
}
///
@@ -63,7 +58,6 @@ namespace BrewMonster
Vector3 oldPos = m_vPos;
m_vPos = vTargetPos + m_vOffset;
- BMLogger.LogError($"[SKILL_GFX_DEBUG] CGfxOnTargetMove.TickMove: Updated pos from {oldPos} to {m_vPos} (target={vTargetPos}, offset={m_vOffset}), returning false (hit by timeout)");
return false; // C++ returns false — hit triggered by fly time timeout
}
diff --git a/Assets/PerfectWorld/UI/Award/DlgAward.prefab b/Assets/PerfectWorld/UI/Award/DlgAward.prefab
index 8d001d660f..9a7d8987ce 100644
--- a/Assets/PerfectWorld/UI/Award/DlgAward.prefab
+++ b/Assets/PerfectWorld/UI/Award/DlgAward.prefab
@@ -421,6 +421,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 1fac4acd7d2948cb81a522265a3f3863, type: 3}
m_Name:
m_EditorClassIdentifier:
+ skillNameText: {fileID: 0}
+ imageProgress: {fileID: 0}
m_pBtn_Confirm: {fileID: 2022223185403607436}
_itemSize: {x: 6, y: 6}
_awardItemPrefab: {fileID: 421596072721705907}
@@ -769,7 +771,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: -4}
+ m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &9121733115126255695
@@ -923,7 +925,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: -4}
+ m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3662653153686734878
@@ -1903,7 +1905,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: -4}
+ m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1542407570922745670
diff --git a/Assets/PerfectWorld/UI/Pet/DlgPetHatch.prefab b/Assets/PerfectWorld/UI/Pet/DlgPetHatch.prefab
index 7509addd76..d70ba795af 100644
--- a/Assets/PerfectWorld/UI/Pet/DlgPetHatch.prefab
+++ b/Assets/PerfectWorld/UI/Pet/DlgPetHatch.prefab
@@ -1673,157 +1673,6 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
---- !u!1 &1594203807091332740
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 5532160440658279991}
- - component: {fileID: 6515784035264135153}
- - component: {fileID: 3052060940079008827}
- - component: {fileID: 1849320534743254025}
- m_Layer: 5
- m_Name: Text (TMP) (2)
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &5532160440658279991
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1594203807091332740}
- 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: 2936949163668112319}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 21, y: -55.426666}
- m_SizeDelta: {x: 465.7476, y: 0}
- m_Pivot: {x: 0, y: 0.5}
---- !u!222 &6515784035264135153
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1594203807091332740}
- m_CullTransparentMesh: 1
---- !u!114 &3052060940079008827
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1594203807091332740}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 0
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_text:
- m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
- m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
- m_fontSharedMaterials: []
- m_fontMaterial: {fileID: 0}
- m_fontMaterials: []
- m_fontColor32:
- serializedVersion: 2
- rgba: 4294967295
- m_fontColor: {r: 1, g: 1, b: 1, a: 1}
- m_enableVertexGradient: 0
- m_colorMode: 3
- m_fontColorGradient:
- topLeft: {r: 1, g: 1, b: 1, a: 1}
- topRight: {r: 1, g: 1, b: 1, a: 1}
- bottomLeft: {r: 1, g: 1, b: 1, a: 1}
- bottomRight: {r: 1, g: 1, b: 1, a: 1}
- m_fontColorGradientPreset: {fileID: 0}
- m_spriteAsset: {fileID: 0}
- m_tintAllSprites: 0
- m_StyleSheet: {fileID: 0}
- m_TextStyleHashCode: -1183493901
- m_overrideHtmlColors: 0
- m_faceColor:
- serializedVersion: 2
- rgba: 4294967295
- m_fontSize: 30
- m_fontSizeBase: 30
- m_fontWeight: 400
- m_enableAutoSizing: 0
- m_fontSizeMin: 18
- m_fontSizeMax: 72
- m_fontStyle: 0
- m_HorizontalAlignment: 1
- m_VerticalAlignment: 512
- m_textAlignment: 65535
- m_characterSpacing: 0
- m_wordSpacing: 0
- m_lineSpacing: 0
- m_lineSpacingMax: 0
- m_paragraphSpacing: 0
- m_charWidthMaxAdj: 0
- m_TextWrappingMode: 1
- m_wordWrappingRatios: 0.4
- m_overflowMode: 0
- m_linkedTextComponent: {fileID: 0}
- parentLinkedComponent: {fileID: 0}
- m_enableKerning: 0
- m_ActiveFontFeatures: 6e72656b
- m_enableExtraPadding: 0
- checkPaddingRequired: 0
- m_isRichText: 1
- m_EmojiFallbackSupport: 1
- m_parseCtrlCharacters: 1
- m_isOrthographic: 1
- m_isCullingEnabled: 0
- m_horizontalMapping: 0
- m_verticalMapping: 0
- m_uvLineOffset: 0
- m_geometrySortingOrder: 0
- m_IsTextObjectScaleStatic: 0
- m_VertexBufferAutoSizeReduction: 0
- m_useMaxVisibleDescender: 1
- m_pageToDisplay: 1
- m_margin: {x: 0, y: 0, z: 0, w: 0}
- m_isUsingLegacyAnimationComponent: 0
- m_isVolumetricText: 0
- m_hasFontAssetChanged: 0
- m_baseMaterial: {fileID: 0}
- m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
---- !u!114 &1849320534743254025
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1594203807091332740}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 0
- m_VerticalFit: 2
--- !u!1 &1690800784599266304
GameObject:
m_ObjectHideFlags: 0
@@ -2406,6 +2255,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 12345678901234567890123456789012, type: 3}
m_Name:
m_EditorClassIdentifier:
+ skillNameText: {fileID: 0}
+ imageProgress: {fileID: 0}
inventoryPackButtons:
- {fileID: 1307928501189760760}
- {fileID: 7633215151546143570}
@@ -2445,7 +2296,7 @@ MonoBehaviour:
- {fileID: 7991954821956009045}
equipmentPackButtons: []
fashionPackButtons: []
- detailPanelRoot: {fileID: 4539830910443594431}
+ detailPanelRoot: {fileID: 8629454032418312454}
detailPanelOffset: {x: 20, y: 0}
hideDetailOnStart: 1
nameText:
@@ -2453,7 +2304,7 @@ MonoBehaviour:
tmp: {fileID: 0}
descriptionText:
legacy: {fileID: 0}
- tmp: {fileID: 4138010606315712091}
+ tmp: {fileID: 3370202546434328191}
extendedDescText:
legacy: {fileID: 0}
tmp: {fileID: 0}
@@ -4483,7 +4334,7 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 8738303048454357126}
- - {fileID: 2936949163668112319}
+ - {fileID: 2213460703881143580}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -6960,126 +6811,6 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
---- !u!1 &4539830910443594431
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 2936949163668112319}
- - component: {fileID: 2137730523684877893}
- - component: {fileID: 8095628546895960714}
- - component: {fileID: 1416550783277963328}
- - component: {fileID: 1760085209474819873}
- m_Layer: 5
- m_Name: item_info
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!224 &2936949163668112319
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4539830910443594431}
- 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: 2160212043352760985}
- - {fileID: 6104246187787285212}
- - {fileID: 5532160440658279991}
- m_Father: {fileID: 2249009488791876389}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: -131.8877, y: 88.297485}
- m_SizeDelta: {x: -1417.281, y: -997}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &2137730523684877893
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4539830910443594431}
- m_CullTransparentMesh: 1
---- !u!114 &8095628546895960714
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4539830910443594431}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 0
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_Sprite: {fileID: 21300000, guid: 31724268aed254d4c9a0523e647a6c71, type: 3}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
- m_UseSpriteMesh: 0
- m_PixelsPerUnitMultiplier: 1
---- !u!114 &1416550783277963328
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4539830910443594431}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Padding:
- m_Left: 21
- m_Right: 0
- m_Top: 0
- m_Bottom: 19
- m_ChildAlignment: 0
- m_Spacing: 0
- m_ChildForceExpandWidth: 1
- m_ChildForceExpandHeight: 1
- m_ChildControlWidth: 0
- m_ChildControlHeight: 0
- m_ChildScaleWidth: 0
- m_ChildScaleHeight: 0
- m_ReverseArrangement: 0
---- !u!114 &1760085209474819873
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 4539830910443594431}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 0
- m_VerticalFit: 2
--- !u!1 &4559531019139891630
GameObject:
m_ObjectHideFlags: 0
@@ -11125,157 +10856,6 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
---- !u!1 &7106375664143841416
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 2160212043352760985}
- - component: {fileID: 7952468642615176995}
- - component: {fileID: 8888546309976738590}
- - component: {fileID: 8633753318584029832}
- m_Layer: 5
- m_Name: Text (TMP)
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &2160212043352760985
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7106375664143841416}
- 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: 2936949163668112319}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 21, y: -0}
- m_SizeDelta: {x: 472.5032, y: 0}
- m_Pivot: {x: 0, y: 0.5}
---- !u!222 &7952468642615176995
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7106375664143841416}
- m_CullTransparentMesh: 1
---- !u!114 &8888546309976738590
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7106375664143841416}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 0
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_text:
- m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
- m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
- m_fontSharedMaterials: []
- m_fontMaterial: {fileID: 0}
- m_fontMaterials: []
- m_fontColor32:
- serializedVersion: 2
- rgba: 4294967295
- m_fontColor: {r: 1, g: 1, b: 1, a: 1}
- m_enableVertexGradient: 0
- m_colorMode: 3
- m_fontColorGradient:
- topLeft: {r: 1, g: 1, b: 1, a: 1}
- topRight: {r: 1, g: 1, b: 1, a: 1}
- bottomLeft: {r: 1, g: 1, b: 1, a: 1}
- bottomRight: {r: 1, g: 1, b: 1, a: 1}
- m_fontColorGradientPreset: {fileID: 0}
- m_spriteAsset: {fileID: 0}
- m_tintAllSprites: 0
- m_StyleSheet: {fileID: 0}
- m_TextStyleHashCode: -1183493901
- m_overrideHtmlColors: 0
- m_faceColor:
- serializedVersion: 2
- rgba: 4294967295
- m_fontSize: 30
- m_fontSizeBase: 30
- m_fontWeight: 400
- m_enableAutoSizing: 0
- m_fontSizeMin: 18
- m_fontSizeMax: 72
- m_fontStyle: 0
- m_HorizontalAlignment: 1
- m_VerticalAlignment: 512
- m_textAlignment: 65535
- m_characterSpacing: 0
- m_wordSpacing: 0
- m_lineSpacing: 0
- m_lineSpacingMax: 0
- m_paragraphSpacing: 0
- m_charWidthMaxAdj: 0
- m_TextWrappingMode: 1
- m_wordWrappingRatios: 0.4
- m_overflowMode: 0
- m_linkedTextComponent: {fileID: 0}
- parentLinkedComponent: {fileID: 0}
- m_enableKerning: 0
- m_ActiveFontFeatures: 6e72656b
- m_enableExtraPadding: 0
- checkPaddingRequired: 0
- m_isRichText: 1
- m_EmojiFallbackSupport: 1
- m_parseCtrlCharacters: 1
- m_isOrthographic: 1
- m_isCullingEnabled: 0
- m_horizontalMapping: 0
- m_verticalMapping: 0
- m_uvLineOffset: 0
- m_geometrySortingOrder: 0
- m_IsTextObjectScaleStatic: 0
- m_VertexBufferAutoSizeReduction: 0
- m_useMaxVisibleDescender: 1
- m_pageToDisplay: 1
- m_margin: {x: 0, y: 0, z: 0, w: 0}
- m_isUsingLegacyAnimationComponent: 0
- m_isVolumetricText: 0
- m_hasFontAssetChanged: 0
- m_baseMaterial: {fileID: 0}
- m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
---- !u!114 &8633753318584029832
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 7106375664143841416}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 0
- m_VerticalFit: 2
--- !u!1 &7117451425221748005
GameObject:
m_ObjectHideFlags: 0
@@ -14419,159 +13999,6 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls: []
---- !u!1 &8705925486655377445
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 6104246187787285212}
- - component: {fileID: 1836077962666358815}
- - component: {fileID: 4138010606315712091}
- - component: {fileID: 3133474369300817254}
- m_Layer: 5
- m_Name: Text (TMP) (1)
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &6104246187787285212
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 8705925486655377445}
- 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: 2936949163668112319}
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 21, y: -27.713333}
- m_SizeDelta: {x: 465.7476, y: 38.28}
- m_Pivot: {x: 0, y: 0.5}
---- !u!222 &1836077962666358815
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 8705925486655377445}
- m_CullTransparentMesh: 1
---- !u!114 &4138010606315712091
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 8705925486655377445}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 0
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_text: 'abcdegtiklm
-
-'
- m_isRightToLeft: 0
- m_fontAsset: {fileID: 11400000, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
- m_sharedMaterial: {fileID: 9092487103257209053, guid: 369c2e14814cc9a4b8e3ad4e37769134, type: 2}
- m_fontSharedMaterials: []
- m_fontMaterial: {fileID: 0}
- m_fontMaterials: []
- m_fontColor32:
- serializedVersion: 2
- rgba: 4294967295
- m_fontColor: {r: 1, g: 1, b: 1, a: 1}
- m_enableVertexGradient: 0
- m_colorMode: 3
- m_fontColorGradient:
- topLeft: {r: 1, g: 1, b: 1, a: 1}
- topRight: {r: 1, g: 1, b: 1, a: 1}
- bottomLeft: {r: 1, g: 1, b: 1, a: 1}
- bottomRight: {r: 1, g: 1, b: 1, a: 1}
- m_fontColorGradientPreset: {fileID: 0}
- m_spriteAsset: {fileID: 0}
- m_tintAllSprites: 0
- m_StyleSheet: {fileID: 0}
- m_TextStyleHashCode: -1183493901
- m_overrideHtmlColors: 0
- m_faceColor:
- serializedVersion: 2
- rgba: 4294967295
- m_fontSize: 30
- m_fontSizeBase: 30
- m_fontWeight: 400
- m_enableAutoSizing: 0
- m_fontSizeMin: 18
- m_fontSizeMax: 72
- m_fontStyle: 0
- m_HorizontalAlignment: 1
- m_VerticalAlignment: 512
- m_textAlignment: 65535
- m_characterSpacing: 0
- m_wordSpacing: 0
- m_lineSpacing: 0
- m_lineSpacingMax: 0
- m_paragraphSpacing: 0
- m_charWidthMaxAdj: 0
- m_TextWrappingMode: 1
- m_wordWrappingRatios: 0.4
- m_overflowMode: 0
- m_linkedTextComponent: {fileID: 0}
- parentLinkedComponent: {fileID: 0}
- m_enableKerning: 0
- m_ActiveFontFeatures: 6e72656b
- m_enableExtraPadding: 0
- checkPaddingRequired: 0
- m_isRichText: 1
- m_EmojiFallbackSupport: 1
- m_parseCtrlCharacters: 1
- m_isOrthographic: 1
- m_isCullingEnabled: 0
- m_horizontalMapping: 0
- m_verticalMapping: 0
- m_uvLineOffset: 0
- m_geometrySortingOrder: 0
- m_IsTextObjectScaleStatic: 0
- m_VertexBufferAutoSizeReduction: 0
- m_useMaxVisibleDescender: 1
- m_pageToDisplay: 1
- m_margin: {x: 0, y: 0, z: 0, w: 0}
- m_isUsingLegacyAnimationComponent: 0
- m_isVolumetricText: 0
- m_hasFontAssetChanged: 0
- m_baseMaterial: {fileID: 0}
- m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
---- !u!114 &3133474369300817254
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 8705925486655377445}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 0
- m_VerticalFit: 2
--- !u!1 &8723464662275671517
GameObject:
m_ObjectHideFlags: 0
@@ -15268,3 +14695,139 @@ MonoBehaviour:
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!1001 &847402817891213973
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 2249009488791876389}
+ m_Modifications:
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_Pivot.x
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_Pivot.y
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_AnchorMin.x
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 450
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 220.02612
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: -32.73999
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 2412057975732520665, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_IsActive
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 5721094068644211543, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_IsActive
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6830833846243993097, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_Name
+ value: item_info
+ objectReference: {fileID: 0}
+ - target: {fileID: 7370156420958780641, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ propertyPath: m_IsActive
+ value: 0
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+--- !u!224 &2213460703881143580 stripped
+RectTransform:
+ m_CorrespondingSourceObject: {fileID: 1546246053547542409, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ m_PrefabInstance: {fileID: 847402817891213973}
+ m_PrefabAsset: {fileID: 0}
+--- !u!114 &3370202546434328191 stripped
+MonoBehaviour:
+ m_CorrespondingSourceObject: {fileID: 2668322321768899818, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ m_PrefabInstance: {fileID: 847402817891213973}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!114 &8629454032418312454 stripped
+MonoBehaviour:
+ m_CorrespondingSourceObject: {fileID: 8936108025019184019, guid: c56ed80641ff74ce49f91401e3eb8367, type: 3}
+ m_PrefabInstance: {fileID: 847402817891213973}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fc26b8fa93aea49b4abb8fe5455e51fe, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
diff --git a/Assets/Prefabs/UI/DlgInstall.prefab b/Assets/Prefabs/UI/DlgInstall.prefab
index fd8a549ed5..6f3794f91f 100644
--- a/Assets/Prefabs/UI/DlgInstall.prefab
+++ b/Assets/Prefabs/UI/DlgInstall.prefab
@@ -3554,7 +3554,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 0.392}
+ m_Color: {r: 1, g: 1, b: 1, a: 0}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
@@ -10541,7 +10541,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0}
- m_RaycastTarget: 1
+ m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
@@ -10569,14 +10569,17 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0785d9ccbdc425a44b6ae1f4a3afad06, type: 3}
m_Name:
m_EditorClassIdentifier:
+ skillNameText: {fileID: 0}
+ imageProgress: {fileID: 0}
m_Mode: 0
m_SlotFirstParent: {fileID: 5489844476385409289}
m_TxtFirstName: {fileID: 3128721472606901163}
- m_SlotSecondlParent: {fileID: 7151360590639773519}
+ m_SlotSecondParent: {fileID: 7151360590639773519}
m_TxtSecondName: {fileID: 4492084240745408081}
m_TxtMoney: {fileID: 6140428454487430115}
m_BtnMergeOrReset: {fileID: 8208092408021918524}
m_BtnCancel: {fileID: 4503836757578509720}
+ m_BtnClose: {fileID: 5942200196902544367}
khung_item: {fileID: 21300000, guid: a5366f3bce011c046902e39b6bd3a077, type: 3}
itemInventoryRoot: {fileID: 7750009739432212686}
--- !u!1 &5641506892578507279
@@ -12072,6 +12075,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 12345678901234567890123456789012, type: 3}
m_Name:
m_EditorClassIdentifier:
+ skillNameText: {fileID: 0}
+ imageProgress: {fileID: 0}
inventoryPackButtons:
- {fileID: 3263912320807982326}
- {fileID: 7118617704469309534}
diff --git a/Assets/Prefabs/UI/DlgUninstall.prefab b/Assets/Prefabs/UI/DlgUninstall.prefab
index 7e106f1584..99616be4f8 100644
--- a/Assets/Prefabs/UI/DlgUninstall.prefab
+++ b/Assets/Prefabs/UI/DlgUninstall.prefab
@@ -12611,6 +12611,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 12345678901234567890123456789012, type: 3}
m_Name:
m_EditorClassIdentifier:
+ skillNameText: {fileID: 0}
+ imageProgress: {fileID: 0}
inventoryPackButtons:
- {fileID: 7349348188983894504}
- {fileID: 3445126299409532821}
@@ -14368,7 +14370,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 0}
- m_RaycastTarget: 1
+ m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
@@ -14396,14 +14398,17 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0785d9ccbdc425a44b6ae1f4a3afad06, type: 3}
m_Name:
m_EditorClassIdentifier:
+ skillNameText: {fileID: 0}
+ imageProgress: {fileID: 0}
m_Mode: 1
m_SlotFirstParent: {fileID: 7418547291555597629}
m_TxtFirstName: {fileID: 8969434063030871197}
- m_SlotSecondlParent: {fileID: 0}
+ m_SlotSecondParent: {fileID: 0}
m_TxtSecondName: {fileID: 0}
m_TxtMoney: {fileID: 4189875348703427985}
m_BtnMergeOrReset: {fileID: 4189663341364179351}
m_BtnCancel: {fileID: 5948134181014720611}
+ m_BtnClose: {fileID: 7824290302850289289}
khung_item: {fileID: 21300000, guid: a5366f3bce011c046902e39b6bd3a077, type: 3}
itemInventoryRoot: {fileID: 7451395605081796144}
--- !u!1 &8698343819671822384
@@ -14744,7 +14749,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 0.392}
+ m_Color: {r: 1, g: 1, b: 1, a: 0}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
diff --git a/Assets/Prefabs/UI/SkillUI.prefab b/Assets/Prefabs/UI/SkillUI.prefab
index f8a042ce7e..78ac87b668 100644
--- a/Assets/Prefabs/UI/SkillUI.prefab
+++ b/Assets/Prefabs/UI/SkillUI.prefab
@@ -1018,7 +1018,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 335.91, y: -507.53912}
+ m_AnchoredPosition: {x: 335.91, y: -431.53912}
m_SizeDelta: {x: 651.82, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2731969899170380074
@@ -1692,9 +1692,9 @@ RectTransform:
- {fileID: 4504331075840543341}
m_Father: {fileID: 1361524257611413148}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 108.9562, y: -31.05}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 179.9124, y: 68.0217}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8804506040386004496
@@ -4482,9 +4482,9 @@ RectTransform:
- {fileID: 2027606699309904338}
m_Father: {fileID: 1361524257611413148}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 468.781, y: -31.05}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 179.9124, y: 68.0217}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &6741821173640675138
@@ -10253,7 +10253,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 335.47, y: -263.3}
+ m_AnchoredPosition: {x: 335.47, y: -225.3}
m_SizeDelta: {x: 618.94, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5943966890611580968
@@ -11851,7 +11851,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 335.47, y: -530.58997}
+ m_AnchoredPosition: {x: 335.47, y: -454.59}
m_SizeDelta: {x: 618.94, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &9030098628201859511
@@ -13973,9 +13973,9 @@ RectTransform:
- {fileID: 911293677621153352}
m_Father: {fileID: 1361524257611413148}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 288.8686, y: -31.05}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 179.9124, y: 68.0217}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5623009994815814977
diff --git a/Assets/Scripts/CECHostPlayer.Inventory.cs b/Assets/Scripts/CECHostPlayer.Inventory.cs
index 8358cfec06..c6105f2b43 100644
--- a/Assets/Scripts/CECHostPlayer.Inventory.cs
+++ b/Assets/Scripts/CECHostPlayer.Inventory.cs
@@ -1,4 +1,4 @@
-using BrewMonster.Managers;
+using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.Scripts;
using BrewMonster.Scripts.Managers;
@@ -22,12 +22,76 @@ namespace BrewMonster
var data = Msg.dwParam1 as byte[];
int cmd = Convert.ToInt32(Msg.dwParam2);
int hostId = Convert.ToInt32(Msg.dwParam3);
-
switch (cmd)
{
case CommandID.OWN_IVTR_DATA:
{
LogInventoryPacket("OWN_IVTR_DATA", data, hostId);
+
+ // C++: pPack->ResetItems(*pCmd) where cmd_own_ivtr_info.content is a compact stream:
+ // for each slot [0..ivtr_size): tid (int); if tid>=0 then expire_date (int) and amount (int).
+ if (data != null && data.Length >= 6)
+ {
+ byte byPackage = data[0];
+ byte ivtrSize = data[1];
+ uint contentLength = BitConverter.ToUInt32(data, 2);
+ int index = 6;
+ int remaining = data.Length - index;
+ int contentBytes = remaining;
+ if (contentLength < (uint)remaining)
+ contentBytes = (int)contentLength;
+
+ var inv = GetInventory(byPackage);
+ if (inv != null)
+ {
+ inv.Resize(ivtrSize);
+ inv.RemoveAllItems();
+
+ int end = index + Math.Max(0, contentBytes);
+ for (int slot = 0; slot < ivtrSize; slot++)
+ {
+ if (index + 4 > end)
+ break;
+ int tid = BitConverter.ToInt32(data, index);
+ index += 4;
+ if (tid < 0)
+ {
+ inv.SetItem(slot, null);
+ continue;
+ }
+ if (index + 8 > end)
+ break;
+ int expireDate = BitConverter.ToInt32(data, index);
+ index += 4;
+ int amount = BitConverter.ToInt32(data, index);
+ index += 4;
+
+ if (amount > 0)
+ {
+ var item = EC_IvtrItem.CreateItem(tid, expireDate, amount);
+ if (item != null)
+ {
+ item.Package = byPackage;
+ item.Slot = slot;
+ item.SetCount(amount);
+ inv.SetItem(slot, item);
+ }
+ }
+ else
+ {
+ inv.SetItem(slot, null);
+ }
+ }
+ }
+
+ if (byPackage == InventoryConst.IVTRTYPE_EQUIPPACK)
+ {
+ UpdateEquipSkins();
+ }
+
+ var ui = GameObject.FindFirstObjectByType();
+ ui?.RefreshAll();
+ }
break;
}
case CommandID.OWN_IVTR_DETAIL_DATA:
@@ -71,6 +135,19 @@ namespace BrewMonster
break;
}
+ case CommandID.CHANGE_IVTR_SIZE:
+ {
+ // C++: resize pack (normal inventory)
+ if (data != null && data.Length >= 4)
+ {
+ int newSize = BitConverter.ToInt32(data, 0);
+ if (m_pPack != null)
+ m_pPack.Resize(newSize);
+ var ui = GameObject.FindFirstObjectByType();
+ ui?.RefreshAll();
+ }
+ break;
+ }
case CommandID.GET_OWN_MONEY:
{
if (data != null)
@@ -168,14 +245,13 @@ namespace BrewMonster
{
case CommandID.OWN_ITEM_INFO:
{
- //Debug.Log("[Inventory] OWN_ITEM_INFO received");
- //var data = Msg.dwParam1 as byte[];
- //int hostId = Convert.ToInt32(Msg.dwParam3);
- //LogInventoryPacket("OWN_ITEM_INFO", data, hostId);
+ if (Application.isEditor || Debug.isDebugBuild)
+ Debug.Log($"[INVNET] HST_OWNITEMINFO cmd=OWN_ITEM_INFO bytes={(Msg.dwParam1 as byte[])?.Length ?? 0}");
- //Handmade
+ // Match C++ cmd_own_item_info layout and behavior: update an existing item in place.
+ // If the slot is missing (can happen if client missed OWN_IVTR_DATA), create it to match server state.
var data = Msg.dwParam1 as byte[];
- if (data == null || data.Length == 0)
+ if (data == null || data.Length < 22)
return;
byte byPackage = data[0];
@@ -184,7 +260,6 @@ namespace BrewMonster
int expire_date = BitConverter.ToInt32(data, 6);
int state = BitConverter.ToInt32(data, 10);
uint count = BitConverter.ToUInt32(data, 14);
- ushort crc = BitConverter.ToUInt16(data, 18);
ushort content_length = BitConverter.ToUInt16(data, 20);
byte[] content = null;
@@ -192,38 +267,45 @@ namespace BrewMonster
{
content = new byte[content_length];
Buffer.BlockCopy(data, 22, content, 0, content_length);
-
- string hexDebug = BitConverter.ToString(content);
- //Debug.Log($"[OWN_ITEM_INFO] Full Content Hex ({content_length} bytes): {hexDebug}");
}
- //Debug.Log($"[OWN_ITEM_INFO] Parsed: package={byPackage}, slot={bySlot}, tid={type}, count={count}, content_len={content_length}");
-
EC_Inventory pInventory = GetInventory(byPackage);
- EC_IvtrItem newItem = EC_IvtrItem.CreateItem(type, expire_date, (int)count);
+ if (pInventory == null)
+ return;
- if (newItem != null)
+ if (bySlot >= pInventory.GetSize())
+ pInventory.Resize(bySlot + 1);
+
+ var pItem = pInventory.GetItem(bySlot, false);
+ if (pItem == null)
{
- newItem.SetProcType(state);
-
- newItem.GetDetailDataFromLocal();
- if (content != null && content.Length > 0)
- {
- newItem.SetItemInfo(content, content_length);
- }
-
- pInventory.SetItem(bySlot, newItem);
-
- //Debug.Log($"[OWN_ITEM_INFO] Fixed Update: Pack {byPackage} Slot {bySlot} - Type {type}");
+ pItem = EC_IvtrItem.CreateItem(type, expire_date, (int)count);
+ if (pItem == null)
+ return;
+ pItem.Package = byPackage;
+ pItem.Slot = bySlot;
+ pInventory.SetItem(bySlot, pItem);
}
+ pItem.SetExpireDate(expire_date);
+ pItem.SetProcType(state);
+ pItem.SetAmount((int)count);
+ if (content != null && content.Length > 0)
+ pItem.SetItemInfo(content, content.Length);
+ else
+ pItem.SetItemInfo(null, 0);
+
+#if UNITY_EDITOR
+ Debug.Log($"[Inventory] OWN_ITEM_INFO pkg={byPackage} slot={bySlot} tid={type} count={count} contentLen={content_length}");
+#endif
+
if (byPackage == InventoryConst.IVTRTYPE_EQUIPPACK)
{
UpdateEquipSkins();
}
else if (byPackage == InventoryConst.IVTRTYPE_PACK)
{
- if (newItem.IsEquipment())
+ if (pItem != null && pItem.IsEquipment())
{
// TODO
}
@@ -342,7 +424,7 @@ namespace BrewMonster
}
// Trigger UI refresh if an EC_InventoryUI is present in scene
- var ui = GameObject.FindObjectOfType();
+ var ui = GameObject.FindFirstObjectByType();
if (ui != null)
{
ui.RefreshAll();
@@ -354,204 +436,215 @@ namespace BrewMonster
}
}
+ ///
+ /// Message MSG_HST_PICKUPITEM handler. Matches C++ flow: switch only fills idItem/iExpireDate/iAmount/iCmdLastSlot/iCmdSlotAmount/iPack/iMsg;
+ /// then single common path: MergeItem (or PutItemInSlot to match server slot), GetItemInfo request for equipment, notifications, RefreshAll.
+ ///
public void OnMsgHstPickupItem(in ECMSG Msg)
{
var data = Msg.dwParam1 as byte[];
int cmd = Convert.ToInt32(Msg.dwParam2);
+ if (data == null)
+ return;
+
+ if (Application.isEditor || Debug.isDebugBuild)
+ Debug.Log($"[INVNET] HST_PICKUPITEM cmd={cmd} bytes={data.Length}");
bool bDoOther = false;
- int idItem, iExpireDate = 0, iAmount, iCmdLastSlot, iCmdSlotAmount, iPack, iMsg = -1;
+ int idItem = 0, iExpireDate = 0, iAmount = 0, iCmdLastSlot = 0, iCmdSlotAmount = 0, iPack = 0, iMsg = -1;
switch (cmd)
{
- case CommandID.HOST_OBTAIN_ITEM:
- {
- // Parse cmd_host_obtain_item struct data
- int type = BitConverter.ToInt32(data, 0);
- int expire_date = BitConverter.ToInt32(data, 4);
- uint amount = BitConverter.ToUInt32(data, 8);
- uint slot_amount = BitConverter.ToUInt32(data, 12);
- byte where = data[16]; // Package index
- byte index = data[17]; // Slot index in that package
- var newItem = EC_IvtrItem.CreateItem(type, expire_date, (int)amount);
-
- // Add item to inventory
- var ivt = GetInventory(where);
- ivt.SetItem(index, newItem);
-
- Debug.Log(
- $"[HOST_OBTAIN_ITEM] Successfully added item {type} to package {where}, slot {index} with count {amount}");
-
- // Trigger UI refresh if an EC_InventoryUI is present in scene
- var ui = GameObject.FindFirstObjectByType();
- if (ui != null)
- {
- ui.RefreshAll();
- }
-
- UpdateEquipSkins();
- }
- break;
case CommandID.PICKUP_ITEM:
{
- int tid = BitConverter.ToInt32(data, 0);
- int expire_date = BitConverter.ToInt32(data, 4);
- iAmount = (int)BitConverter.ToUInt32(data, 8);
- uint iSlotAmount = BitConverter.ToUInt32(data, 12);
- byte byPackage = data[16];
- byte bySlot = data[17];
-
- //Debug.Log($"[Inventory] PICKUP_ITEM: tid={tid}, expire_date={expire_date}, iAmount={iAmount}, iSlotAmount={iSlotAmount}, byPackage={byPackage}, bySlot={bySlot}");
-
- // Notify pickupItem script about successful pickup
- pickupItem pickupScript = pickupItem.Instance;
- if (pickupScript != null)
- {
- //Debug.Log($"[Inventory] PICKUP_ITEM: tid={tid}, expire_date={expire_date}, iAmount={iAmount}, iSlotAmount={iSlotAmount}, byPackage={byPackage}, bySlot={bySlot}");
-
- // Notify pickupItem script about successful pickup
- pickupScript = UnityEngine.Object.FindFirstObjectByType();
- if (pickupScript != null)
- {
- pickupScript.OnPickupSuccess(tid);
- }
-
- // Create new inventory item data
- var newItem = EC_IvtrItem.CreateItem(tid, expire_date, (int)iAmount);
-
- // Add item to inventory
- var ivt = GetInventory(byPackage);
- ivt.SetItem(bySlot, newItem);
-
- //Debug.Log($"[Inventory] Successfully added item {tid} to package {byPackage}, slot {bySlot} with count {iAmount}");
-
- // Trigger UI refresh if an EC_InventoryUI is present in scene
- var ui = GameObject.FindFirstObjectByType();
- if (ui != null)
- {
- ui.RefreshAll();
- }
- }
- else
- {
- Debug.LogWarning("[Inventory] PICKUP_ITEM: Invalid data length");
- }
-
+ var pCmdPickup = GPDataTypeHelper.FromBytes(data);
+ idItem = pCmdPickup.tid;
+ iExpireDate = pCmdPickup.expire_date;
+ iAmount = (int)pCmdPickup.iAmount;
+ iCmdLastSlot = pCmdPickup.bySlot;
+ iCmdSlotAmount = (int)pCmdPickup.iSlotAmount;
+ iPack = pCmdPickup.byPackage;
+ iMsg = (int)FixedMsg.FIXMSG_PICKUPITEM;
+ break;
+ }
+ case CommandID.HOST_OBTAIN_ITEM:
+ {
+ var pCmdObtain = GPDataTypeHelper.FromBytes(data);
+ idItem = pCmdObtain.type;
+ iExpireDate = pCmdObtain.expire_date;
+ iAmount = (int)pCmdObtain.amount;
+ iCmdLastSlot = pCmdObtain.index;
+ iCmdSlotAmount = (int)pCmdObtain.slot_amount;
+ iPack = pCmdObtain.where;
+ iMsg = (int)FixedMsg.FIXMSG_GAINITEM;
+ break;
+ }
+ case CommandID.PRODUCE_ONCE:
+ {
+ var pCmdProduce = GPDataTypeHelper.FromBytes(data);
+ idItem = pCmdProduce.type;
+ iExpireDate = 0;
+ iAmount = (int)pCmdProduce.amount;
+ iCmdLastSlot = pCmdProduce.index;
+ iCmdSlotAmount = (int)pCmdProduce.slot_amount;
+ iPack = pCmdProduce.where;
+ iMsg = (int)FixedMsg.FIXMSG_PRODUCEITEM;
+ var dlgProduce = UnityEngine.Object.FindFirstObjectByType();
+ dlgProduce?.OnProduceOnce(pCmdProduce);
break;
}
case CommandID.TASK_DELIVER_ITEM:
- cmd_task_deliver_item pCmd = GPDataTypeHelper.FromBytes(data);
- // ASSERT(pCmd);
-
- idItem = pCmd.type;
- iExpireDate = pCmd.expire_date;
- iAmount = (int)pCmd.amount;
- iCmdLastSlot = pCmd.index;
- iCmdSlotAmount = (int)pCmd.slot_amount;
- iPack = pCmd.where;
+ {
+ var pCmdTask = GPDataTypeHelper.FromBytes(data);
+ idItem = pCmdTask.type;
+ iExpireDate = pCmdTask.expire_date;
+ iAmount = (int)pCmdTask.amount;
+ iCmdLastSlot = pCmdTask.index;
+ iCmdSlotAmount = (int)pCmdTask.slot_amount;
+ iPack = pCmdTask.where;
iMsg = (int)FixedMsg.FIXMSG_GAINITEM;
bDoOther = true;
-
-
- // Create new inventory item data
- var taskNewItem = EC_IvtrItem.CreateItem(idItem, iExpireDate, (int)iAmount);
-
- // Add item to inventory
- var task_ivt = GetInventory((byte)iPack);
- if (!task_ivt.MergeItem(idItem, iExpireDate, iAmount, out var iLastSlot, out var iSlotNum) ||
- iLastSlot != iCmdLastSlot || iSlotNum != iCmdSlotAmount)
- {
- return;
- }
-
- task_ivt.SetItem(iCmdLastSlot, taskNewItem);
-
- //Debug.Log($"[Inventory] Successfully added item {tid} to package {byPackage}, slot {bySlot} with count {iAmount}");
-
- // Trigger UI refresh if an EC_InventoryUI is present in scene
- var task_ui = GameObject.FindFirstObjectByType();
- if (task_ui != null)
- {
- task_ui.RefreshAll();
- }
-
break;
- case CommandID.PRODUCE_ONCE:
+ }
+ default:
+ return;
+ }
+
+#if UNITY_EDITOR
+ Debug.Log($"[Inventory] PICKUP_FLOW cmd={cmd} pack={iPack} slot={iCmdLastSlot} tid={idItem} amt={iAmount} slotAmt={iCmdSlotAmount}");
+#endif
+ EC_Inventory pInventory = GetPack(iPack);
+ if (pInventory == null)
+ return;
+
+ if (iCmdLastSlot >= pInventory.GetSize())
+ pInventory.Resize(iCmdLastSlot + 1);
+
+ bool placed = pInventory.PutItemInSlot(iCmdLastSlot, idItem, iExpireDate, iAmount, out int iLastSlot, out int iSlotNum);
+ if (!placed)
+ {
+ placed = pInventory.MergeItem(idItem, iExpireDate, iAmount, out iLastSlot, out iSlotNum);
+ if (!placed || iLastSlot != iCmdLastSlot || iSlotNum != iCmdSlotAmount)
{
- // Parse cmd_produce_once struct data
- cmd_produce_once produceCmd = GPDataTypeHelper.FromBytes(data);
+#if UNITY_EDITOR
+ Debug.LogWarning($"[Inventory] PICKUP_FLOW desync: placed={placed} lastSlot={iLastSlot} slotNum={iSlotNum} expectedSlot={iCmdLastSlot} expectedSlotAmt={iCmdSlotAmount}");
+#endif
+ return;
+ }
+ }
- int produceItemId = produceCmd.type;
- int produceExpireDate = 0;
- uint produceAmount = produceCmd.amount;
- byte producePack = produceCmd.where;
- byte produceSlot = produceCmd.index;
+ if (cmd == CommandID.HOST_OBTAIN_ITEM && iPack == Inventory_type.IVTRTYPE_PACK)
+ {
+ // C++: CECShoppingManager::Instance().OnObtainItem(iPack, idItem, iAmount);
+ }
- Debug.Log(
- $"[PRODUCE_ONCE] Received: itemId={produceItemId}, amount={produceAmount}, pack={producePack}, slot={produceSlot}");
+ EC_IvtrItem pItem = pInventory.GetItem(iCmdLastSlot, false);
+ if (pItem != null)
+ {
+ pItem.Package = (byte)iPack;
+ pItem.Slot = iCmdLastSlot;
+ int cid = pItem.GetClassID();
+ if (pItem.IsEquipment() ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_TASKNMMATTER ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_TASKDICE ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_TASKITEM ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_GOBLIN_EXPPILL ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_WEDDINGBOOKCARD ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_WEDDINGINVITECARD ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_SKILLTOME ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_GOBLIN ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_PETEGG)
+ {
+ UnityGameSession.c2s_CmdGetItemInfo((byte)iPack, (byte)iCmdLastSlot);
+ }
+ if (iMsg >= 0)
+ {
+ CECGameRun pGameRun = EC_Game.GetGameRun();
+ pGameRun?.AddFixedMessage(iMsg, iAmount, pItem.GetName());
+ }
+ }
- // Get inventory
- var produce_ivt = GetInventory(producePack);
- if (produce_ivt == null)
+ if (bDoOther)
+ {
+ // C++: m_pTaskInterface->DoAutoTeamForTask(idItem);
+ }
+
+ if (cmd == CommandID.PICKUP_ITEM)
+ {
+ var pickupScript = UnityEngine.Object.FindFirstObjectByType();
+ pickupScript?.OnPickupSuccess(idItem);
+ }
+
+ var ui = GameObject.FindFirstObjectByType();
+ ui?.RefreshAll();
+ UpdateEquipSkins();
+ }
+
+ /// Buy from NPC/booth: server sends PURCHASE_ITEM (cmd_purchase_item). C++ OnMsgHstPurchaseItems.
+ public void OnMsgHstPurchaseItems(ECMSG Msg)
+ {
+ var data = Msg.dwParam1 as byte[];
+ if (data == null || data.Length < 11)
+ return;
+
+ var header = GPDataTypeHelper.FromBytes(data);
+ int index = 11;
+ const int itemSize = 15; // item_id(4) + expire_date(4) + count(4) + inv_index(2) + booth_slot(1)
+ EC_Inventory pPack = GetPack(Inventory_type.IVTRTYPE_PACK);
+ if (pPack == null)
+ return;
+
+ var slotsNeedingDetail = new System.Collections.Generic.List();
+
+ for (int i = 0; i < header.item_count && index + itemSize <= data.Length; i++)
+ {
+ int item_id = BitConverter.ToInt32(data, index); index += 4;
+ int expire_date = BitConverter.ToInt32(data, index); index += 4;
+ int count = (int)BitConverter.ToUInt32(data, index); index += 4;
+ ushort inv_index = BitConverter.ToUInt16(data, index); index += 2;
+ index += 1; // booth_slot
+
+ if (inv_index >= pPack.GetSize())
+ pPack.Resize(inv_index + 1);
+
+ bool placed = pPack.PutItemInSlot(inv_index, item_id, expire_date, count, out int lastSlot, out int slotNum);
+ if (!placed)
+ {
+ placed = pPack.MergeItem(item_id, expire_date, count, out lastSlot, out slotNum);
+ if (!placed || lastSlot != inv_index)
+ continue;
+ }
+
+ var pItem = pPack.GetItem(inv_index, false);
+ if (pItem != null)
+ {
+ pItem.Package = (byte)Inventory_type.IVTRTYPE_PACK;
+ pItem.Slot = inv_index;
+ int cid = pItem.GetClassID();
+ if (pItem.IsEquipment() ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_TASKNMMATTER ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_TASKDICE ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_TASKITEM ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_GOBLIN_EXPPILL ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_WEDDINGBOOKCARD ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_WEDDINGINVITECARD ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_SKILLTOME ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_GOBLIN ||
+ cid == (int)EC_IvtrItem.InventoryClassId.ICID_PETEGG)
{
- Debug.LogWarning($"[PRODUCE_ONCE] Invalid inventory package {producePack}");
- return;
- }
-
- // Check if the slot already has an item
- var existingItem = produce_ivt.GetItem(produceSlot, false);
-
- if (existingItem != null)
- {
- if (existingItem.m_tid == produceItemId)
- {
- existingItem.m_iCount = (int)produceAmount;
- Debug.Log(
- $"[PRODUCE_ONCE] Updated existing item count at slot {produceSlot} to {produceAmount}");
- }
- else
- {
- Debug.LogWarning(
- $"[PRODUCE_ONCE] Slot {produceSlot} already has different item (tid={existingItem.m_tid}), not overwriting with {produceItemId}");
- return;
- }
- }
- else
- {
- var produceNewItem = new EC_IvtrItem
- {
- Package = producePack,
- Slot = produceSlot,
- m_tid = produceItemId,
- m_expire_date = produceExpireDate,
- State = 0,
- m_iCount = (int)produceAmount,
- Crc = 0,
- Content = null
- };
-
- produce_ivt.SetItem(produceSlot, produceNewItem);
- Debug.Log($"[PRODUCE_ONCE] Created new item at slot {produceSlot} with count {produceAmount}");
- }
-
- // Trigger UI refresh
- var produce_ui = GameObject.FindFirstObjectByType();
- if (produce_ui != null)
- {
- produce_ui.RefreshAll();
- }
-
- UpdateEquipSkins();
-
- // Notify DlgProduce
- var dlgProduce = GameObject.FindFirstObjectByType();
- if (dlgProduce != null)
- {
- dlgProduce.OnProduceOnce(produceCmd);
+ slotsNeedingDetail.Add((byte)inv_index);
}
}
- break;
}
+
+ AddMoneyAmount(-(int)header.cost);
+
+ foreach (byte slot in slotsNeedingDetail)
+ UnityGameSession.c2s_CmdGetItemInfo((byte)Inventory_type.IVTRTYPE_PACK, slot);
+
+ var ui = GameObject.FindFirstObjectByType();
+ ui?.RefreshAll();
+ UpdateEquipSkins();
}
private void OnMsgHstUseItem(ECMSG Msg)
diff --git a/Assets/Scripts/CECHostPlayer.Skill.cs b/Assets/Scripts/CECHostPlayer.Skill.cs
index 5274471353..8f140fc76d 100644
--- a/Assets/Scripts/CECHostPlayer.Skill.cs
+++ b/Assets/Scripts/CECHostPlayer.Skill.cs
@@ -797,7 +797,7 @@ namespace BrewMonster
byte byPVPMask = glb_BuildPVPMask(bForceAttack);
- Debug.Log($"HoangDev: Cast Skill ID={m_pPrepSkill.GetSkillID()}");
+ Debug.LogError($"HoangDev: Cast Skill ID={m_pPrepSkill.GetSkillID()}");
// Handle instant skills
if (m_pPrepSkill.IsInstant())
@@ -1172,13 +1172,21 @@ namespace BrewMonster
CECIvtrWeapon pWeapon =
(CECIvtrWeapon)m_pEquipPack.GetItem((int)IndexOfIteminEquipmentInventory.EQUIPIVTR_WEAPON);
- if (pWeapon == null || pWeapon.GetCurEndurance() == 0)
+ if (pWeapon == null || pWeapon.CurEndurance == 0)
+ {
+ //BMLogger.LogError(GetName() + " CheckSkillCastCondition: Weapon major type ID = " + Info.weapon);
Info.weapon = 0;
+ }
else if (!CanUseEquipment(pWeapon, ref iReason))
- Info.weapon = (iReason == 5) ? (int)pWeapon.GetDBMajorType().id : 0;
+ {
+
+ Info.weapon = (iReason == 5) ? (int)pWeapon.GetDBMajorType().id : 0; }
else
- Info.weapon = (int)pWeapon.GetDBMajorType().id;
+ {
+
+ Info.weapon = (int)pWeapon.GetDBMajorType().id; }
+ //BMLogger.LogError(GetName() + " CheckSkillCastCondition: Weapon major type ID = " + Info.weapon);
// Get remaining arrow number
CECIvtrArrow pArrow =
(CECIvtrArrow)m_pEquipPack.GetItem((int)IndexOfIteminEquipmentInventory.EQUIPIVTR_PROJECTILE);
diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs
index 860ac61dba..89ec7cd87b 100644
--- a/Assets/Scripts/CECHostPlayer.cs
+++ b/Assets/Scripts/CECHostPlayer.cs
@@ -43,9 +43,9 @@ namespace BrewMonster
private CECHPWorkMan m_pWorkMan; // Host work manager
private uint m_dwLIES; // Logic-influence extend states
private FACTION_FORTRESS_ENTER m_fortressEnter; // ½øÈë»ùµØÐÅÏ¢
- private PVPINFO m_pvp; // pvp information
- private bool m_bInSanctuary = false; // true, player is in sanctuary
- private int m_idFaction = 0; // ID of player's faction
+ //private PVPINFO m_pvp; // pvp information
+ //private bool m_bInSanctuary = false; // true, player is in sanctuary
+ //private int m_idFaction = 0; // ID of player's faction
public bool m_bPrepareFight = false; // true, prepare to fight
private int m_iJumpCount = 0;
private bool m_bJumpInWater = false;
@@ -410,12 +410,6 @@ namespace BrewMonster
{
pointCam.rotation = Quaternion.identity;
}
-#if UNITY_EDITOR
- if (Input.GetKeyDown(KeyCode.C))
- {
- ApplySkillShortcut(1);
- }
-#endif
// Update cursor based on what's under mouse
EstimateCursor();
@@ -565,6 +559,9 @@ namespace BrewMonster
case EC_MsgDef.MSG_HST_PICKUPITEM:
OnMsgHstPickupItem(Msg);
break;
+ case EC_MsgDef.MSG_HST_PURCHASEITEMS:
+ OnMsgHstPurchaseItems(Msg);
+ break;
case EC_MsgDef.MSG_HST_PRODUCEITEM:
OnMsgHstProduceItem(Msg);
break;
@@ -605,6 +602,7 @@ namespace BrewMonster
case EC_MsgDef.MSG_HST_JOINTEAM: OnMsgHstJoinTeam(Msg); break;
case EC_MsgDef.MSG_HST_LEAVETEAM: OnMsgHstLeaveTeam(Msg); break;
case EC_MsgDef.MSG_HST_NEWTEAMMEM: OnMsgHstNewTeamMem(Msg); break;
+ case EC_MsgDef.MSG_HST_TEAMINVITE: OnMsgHstTeamInvite(Msg); break;
case EC_MsgDef.MSG_HST_TEAMMEMBERDATA: OnMsgHstTeamMemberData(Msg); break;
case EC_MsgDef.MSG_PM_DUELOPT: OnMsgHstDuelOpt(Msg); break;
case EC_MsgDef.MSG_HST_CLEARTESSERA: OnMsgHstClearTessera(Msg); break;
@@ -650,6 +648,18 @@ namespace BrewMonster
idOpp = BitConverter.ToInt32(data, 0);
switch (cmdId)
{
+ case CommandID.DUEL_RECV_REQUEST:
+ // Duel invite: show accept/reject popup (origin MSG_PM_DUELOPT with command DUEL_RECV_REQUEST = 214)
+ if (idOpp != 0)
+ {
+ CECUIManager.Instance?.ShowMessageBox(
+ title: "",
+ message: "You have received a duel request. Do you accept?",
+ messageBoxType: MessageBoxType.BothYesNoButton,
+ onClickedYes: () => UnityGameSession.c2s_CmdDuelReply(true, idOpp),
+ onClickedNo: () => UnityGameSession.c2s_CmdDuelReply(false, idOpp));
+ }
+ break;
case CommandID.DUEL_PREPARE:
m_pvp.iDuelState = Duel_state.DUEL_ST_PREPARE;
m_pvp.idDuelOpp = idOpp;
@@ -680,6 +690,32 @@ namespace BrewMonster
}
}
+ /// Host received a team invite (MSG_HST_TEAMINVITE). Payload is cmd_team_leader_invite: idLeader, seq, pickFlag. Shows accept/reject message box and sends reply.
+ private void OnMsgHstTeamInvite(ECMSG Msg)
+ {
+ byte[] data = Msg.dwParam1 as byte[];
+ int idLeader = 0;
+ int team_seq = 0;
+ if (data != null && data.Length >= 8)
+ {
+ idLeader = BitConverter.ToInt32(data, 0);
+ team_seq = BitConverter.ToInt32(data, 4);
+ }
+ else if (data != null && data.Length >= 4)
+ {
+ idLeader = BitConverter.ToInt32(data, 0);
+ }
+ if (idLeader == 0)
+ return;
+ int seqCapture = team_seq;
+ CECUIManager.Instance?.ShowMessageBox(
+ title: "",
+ message: "You have received a team invite. Do you accept?",
+ messageBoxType: MessageBoxType.BothYesNoButton,
+ onClickedYes: () => UnityGameSession.c2s_CmdTeamAgreeInvite(idLeader, seqCapture),
+ onClickedNo: () => UnityGameSession.c2s_CmdTeamRejectInvite(idLeader));
+ }
+
/// Called when MSG_PM_PLAYERDUELOPT (229) is received; server may send duel start to both participants. If host is one of the two ids, set duel state.
public void OnMsgPlayerDuelStart(byte[] data)
{
@@ -1467,10 +1503,10 @@ namespace BrewMonster
}
// Get faction ID
- public int GetFactionID()
- {
- return m_idFaction;
- }
+ //public int GetFactionID()
+ //{
+ // return m_idFaction;
+ //}
public void SetPrayDistancePlus(float prayDistancePlus)
{
m_fPrayDistancePlus = prayDistancePlus;
diff --git a/Assets/Scripts/CECUIManager.cs b/Assets/Scripts/CECUIManager.cs
index fb8068b6ff..c58d6f68b9 100644
--- a/Assets/Scripts/CECUIManager.cs
+++ b/Assets/Scripts/CECUIManager.cs
@@ -462,13 +462,14 @@ public class CECUIManager : MonoSingleton
}
/// Shows the player options menu for the given character. Requires a prefab with id "DlgPlayerOptions" in DialogScriptTableObject.
- public void ShowPlayerOptionsDialog(int characterId)
+ public void ShowPlayerOptionsDialog(int characterId, Vector2 position)
{
if (characterId == 0 || canvasDlg == null) return;
var gui = GetInGameUIMan();
if (_dlgPlayerOptions == null)
_dlgPlayerOptions = gui.GetDialog("DlgPlayerOptions");
_dlgPlayerOptions?.ShowForPlayer(characterId);
+ _dlgPlayerOptions.transform.position = position;
}
///
diff --git a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset
index 0af81e6d95..00cda42fea 100644
--- a/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset
+++ b/Assets/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset
@@ -215,8 +215,141 @@ MonoBehaviour:
m_SourceFontFilePath:
m_AtlasPopulationMode: 1
InternalDynamicOS: 0
- m_GlyphTable: []
- m_CharacterTable: []
+ m_GlyphTable:
+ - m_Index: 1675
+ m_Metrics:
+ m_Width: 45
+ m_Height: 59
+ m_HorizontalBearingX: 3
+ m_HorizontalBearingY: 46
+ m_HorizontalAdvance: 48
+ m_GlyphRect:
+ m_X: 10
+ m_Y: 10
+ m_Width: 45
+ m_Height: 59
+ m_Scale: 1
+ m_AtlasIndex: 0
+ m_ClassDefinitionType: 0
+ - m_Index: 211
+ m_Metrics:
+ m_Width: 45
+ m_Height: 63
+ m_HorizontalBearingX: 3
+ m_HorizontalBearingY: 62
+ m_HorizontalAdvance: 48
+ m_GlyphRect:
+ m_X: 10
+ m_Y: 88
+ m_Width: 45
+ m_Height: 63
+ m_Scale: 1
+ m_AtlasIndex: 0
+ m_ClassDefinitionType: 0
+ - m_Index: 370
+ m_Metrics:
+ m_Width: 50
+ m_Height: 46
+ m_HorizontalBearingX: 5
+ m_HorizontalBearingY: 45
+ m_HorizontalAdvance: 58
+ m_GlyphRect:
+ m_X: 10
+ m_Y: 170
+ m_Width: 50
+ m_Height: 46
+ m_Scale: 1
+ m_AtlasIndex: 0
+ m_ClassDefinitionType: 0
+ - m_Index: 1735
+ m_Metrics:
+ m_Width: 51
+ m_Height: 64
+ m_HorizontalBearingX: 3
+ m_HorizontalBearingY: 63
+ m_HorizontalAdvance: 56
+ m_GlyphRect:
+ m_X: 74
+ m_Y: 10
+ m_Width: 51
+ m_Height: 64
+ m_Scale: 1
+ m_AtlasIndex: 0
+ m_ClassDefinitionType: 0
+ - m_Index: 2103
+ m_Metrics:
+ m_Width: 21
+ m_Height: 51
+ m_HorizontalBearingX: 11
+ m_HorizontalBearingY: 48
+ m_HorizontalAdvance: 43
+ m_GlyphRect:
+ m_X: 74
+ m_Y: 93
+ m_Width: 21
+ m_Height: 51
+ m_Scale: 1
+ m_AtlasIndex: 0
+ m_ClassDefinitionType: 0
+ - m_Index: 299
+ m_Metrics:
+ m_Width: 38
+ m_Height: 62
+ m_HorizontalBearingX: 5
+ m_HorizontalBearingY: 61
+ m_HorizontalAdvance: 48
+ m_GlyphRect:
+ m_X: 10
+ m_Y: 235
+ m_Width: 38
+ m_Height: 62
+ m_Scale: 1
+ m_AtlasIndex: 0
+ m_ClassDefinitionType: 0
+ - m_Index: 1707
+ m_Metrics:
+ m_Width: 43
+ m_Height: 67
+ m_HorizontalBearingX: 2
+ m_HorizontalBearingY: 66
+ m_HorizontalAdvance: 48
+ m_GlyphRect:
+ m_X: 10
+ m_Y: 316
+ m_Width: 43
+ m_Height: 67
+ m_Scale: 1
+ m_AtlasIndex: 0
+ m_ClassDefinitionType: 0
+ m_CharacterTable:
+ - m_ElementType: 1
+ m_Unicode: 7841
+ m_GlyphIndex: 1675
+ m_Scale: 1
+ - m_ElementType: 1
+ m_Unicode: 273
+ m_GlyphIndex: 211
+ m_Scale: 1
+ - m_ElementType: 1
+ m_Unicode: 432
+ m_GlyphIndex: 370
+ m_Scale: 1
+ - m_ElementType: 1
+ m_Unicode: 7901
+ m_GlyphIndex: 1735
+ m_Scale: 1
+ - m_ElementType: 1
+ m_Unicode: 8593
+ m_GlyphIndex: 2103
+ m_Scale: 1
+ - m_ElementType: 1
+ m_Unicode: 361
+ m_GlyphIndex: 299
+ m_Scale: 1
+ - m_ElementType: 1
+ m_Unicode: 7873
+ m_GlyphIndex: 1707
+ m_Scale: 1
m_AtlasTextures:
- {fileID: 28268798066460806}
m_AtlasTextureIndex: 0
@@ -227,12 +360,64 @@ MonoBehaviour:
m_AtlasHeight: 512
m_AtlasPadding: 9
m_AtlasRenderMode: 4169
- m_UsedGlyphRects: []
- m_FreeGlyphRects:
+ m_UsedGlyphRects:
- m_X: 0
m_Y: 0
- m_Width: 511
+ m_Width: 64
+ m_Height: 78
+ - m_X: 0
+ m_Y: 78
+ m_Width: 64
+ m_Height: 82
+ - m_X: 0
+ m_Y: 160
+ m_Width: 69
+ m_Height: 65
+ - m_X: 64
+ m_Y: 0
+ m_Width: 70
+ m_Height: 83
+ - m_X: 64
+ m_Y: 83
+ m_Width: 40
+ m_Height: 70
+ - m_X: 0
+ m_Y: 225
+ m_Width: 57
+ m_Height: 81
+ - m_X: 0
+ m_Y: 306
+ m_Width: 62
+ m_Height: 86
+ m_FreeGlyphRects:
+ - m_X: 134
+ m_Y: 0
+ m_Width: 377
m_Height: 511
+ - m_X: 64
+ m_Y: 153
+ m_Width: 447
+ m_Height: 7
+ - m_X: 69
+ m_Y: 153
+ m_Width: 442
+ m_Height: 358
+ - m_X: 104
+ m_Y: 83
+ m_Width: 407
+ m_Height: 428
+ - m_X: 0
+ m_Y: 392
+ m_Width: 511
+ m_Height: 119
+ - m_X: 57
+ m_Y: 225
+ m_Width: 454
+ m_Height: 81
+ - m_X: 62
+ m_Y: 225
+ m_Width: 449
+ m_Height: 286
m_FontFeatureTable:
m_MultipleSubstitutionRecords: []
m_LigatureSubstitutionRecords: []
@@ -493,9 +678,9 @@ Texture2D:
Hash: 00000000000000000000000000000000
m_IsAlphaChannelOptional: 0
serializedVersion: 3
- m_Width: 1
- m_Height: 1
- m_CompleteImageSize: 1
+ m_Width: 512
+ m_Height: 512
+ m_CompleteImageSize: 262144
m_MipsStripped: 0
m_TextureFormat: 1
m_MipCount: 1
@@ -520,8 +705,8 @@ Texture2D:
m_LightmapFormat: 0
m_ColorSpace: 0
m_PlatformBlob:
- image data: 1
- _typelessdata: 00
+ image data: 262144
+ _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003060809131313131313130b0a080500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070a0d0f11121313131211100e0c090806030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f13151620202020202020181714110c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d101314171a1c1d1f1f20201f1e1d1b181615130f0a050200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f161b1f22232d2d2d2d2d2d2d2423211d171008000000000000000000000000000000000000000000000000000000000000000000000000000000050b1012181d20202326292a2c2c2d2c2c2b29282522211f1b15120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101920272b2e2f3939393939393931302d28221a1208000000000000000000000000000000000000000000000000000000000000000000000000040a0f161c1d24292c2d303335373839393939383634322f2e2b26211e1a140e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f19222b32383b3c464646464646463e3d39332c241a100600000000000000000000000000000000000000000000000000000000000000000000060c161b21272c2f35393a3d40424445464646454443413f3c3b37322d2b261f1a140d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16202b343d434749535353535353534b49453e362c22170c0000000000000000000000000000000000000000000000000000000000000000030a111721272c3338394045474a4d4f50525253535251504e4b4947433c3a37312a251f170f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323d464e545660606060606060575550483e33281d1105000000000000000000000000000000000000000000000000000000000000040c151c232832383d44484b515356595c5d5f5f605f5f5e5c5b5855534e4846423c3631292117110a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b38434e5860626c6c6c6c6c6c6c64615a5045392d2114080000000000000000000000000000000000000000000000000000000000040d161e262e343d43484f54555d606366686a6b6c6c6c6c6b696765625f5855534d46423b3328231c150c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4754606a6f79797979797979716c6155493d3023170a00000000000000000000000000000000000000000000000000000000030d161f2830383f444e54596063676d707375777879797978777674726f6a67615f57534d453f342e261e150c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c868686868686867e7164574b3e3124180b000000000000000000000000000000000000000000000000000000010b151f28313a424a505860626b70757a7d80828385858686858483817e7c78736e69615e5751443f3830261e140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8993939393938a7e7164574b3e3124180b00000000000000000000000000000000000000000000000000000007121d27313a434c545c606a6f767d8285898c8f909292939292918f8e8b8884807b756e69625b504a423830261c110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c89959f9f9f978a7e7164574b3e3124180b0000030506060505030100000000000000000000000000000000040e18242f39434c555d666d737c83898e9298999b9d9e9f9f9f9f9e9c9a9896918d87817b726d605c544a42382e23170d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002050916232f3c4956626f7c8995a2aca4978a7e7164574b3e3124180b070c101213131211100e0b0a08040000000000000000000000020c16202935404b555d676d78808790959b9fa2a9a19e9c9b9a9a9b9d9fa3a8a19e99938e867f746d665c544a3f34281f160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e121416232f3c4956626f7c89959f9f9f978a7e7164574b3e3124181314191c1f1f201f1e1d1a171714110c0500000000000000000008131e28323a45515d676d79828d93999fa7a39f9a97928f8e8d8e8f9092999c9ea6a49f98928b81786d665c50443e31281d1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f141a1e2122252f3c4956626f7c8993939393938a7e7164574b3e31241d202126292b2c2c2c2b29272423211c17100800000000000000010d1925303a44505a606d79828f949fa4a79f99928d8885838181818283868a8f949ea0a8a29f938e81786d605a50433a2f24180d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c161b1f262a2d2e31353c4956626f7c868686868686867e7164574b3e3124292c2d32363839393838363431302d28221a120800000000000005111d2935414c56626c75818e949fa6a69f959086817c797674747475777a7d828991969fa7a59e938d80736c61554b4035291d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b121821272c31363a3b3e41444754606a6f79797979797979716c6155493d302f35393a3f43454646454443413e3c39332c241a100500000000000713202d3946525e68717e8b939ea6a89f948f837b746f6c6568676768676d70757c8490959fa8a59d928a7d70675d5145392f24180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c151d232832383b4246484b4e50514e5860626c6c6c6c6c6c6c64615a504539313a4145474c4f5252535251504d4a49453e362c22170c0000000005111d2935414c56616d7a85929fa5aca0968f82796e6962605b535a5b555d60636a6f7a839096a1ada49e9184796d60554b4035291d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161e272e343d43484d5355585b5d5e5f5f5f5e60606060606060575550483e353e434c5154595c5e5f5f5f5e5c5a575550483e33281c11040000000713202d3946525d6874808d97a2ada59d9184796d675f575350494e4e4b51535860686d7a84919ea6ada1968c7f73675d5145392c1f130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f28303940454f54575f6164686a6b6c6c6c6b6a6865625f5753514b433e343e474f555d6065696b6c6c6b6b696764615a5045392d2114080000000714212e3a4754616d7a86929fa9aa9e93897c6f675d554d46443f41414045474e565e68707d8a949faba89e9285796d6053473a2f24180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007131d28313a424b51596063696e71747778787978787674726e6965605c5550443f474f5961676d727678797978777674716c6155493c3023170a000005121e2a36424d5765727f8c98a2aea89b8f82756b60554b433c37332d2f35393d444c56616b7683909caaada1978a7e7164554b4035291d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c18242f3a434b545c606b6f757b7e8183848586858583817f7b77726d67615a504a4f59616b707a7f82848586858483807e7164574a3e3124170b00000714212d3a46535e697783909daaaca196897c6f63594f433a312b272224292c323a444f5964717e8a98a2aea99c8f8275675d5145392c1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151e2935404b555d666d747c82878b8e909192929291908e8b88847e79706c605c5454606b707d858c8f91929292918f8d83776a5d5144372a1e1100000815212e3b4854616e7b8795a0abab9e9184786c6053463d31281f1b17181d2029323e4753606d7985929facac9f92867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c26303845515d676d7881898f939a9b9d9e9f9f9f9e9d9b9895918b857d746d665c5c66707d8792979c9e9f9f9e9e9c9084776a5d5144372a1e1100000b1825313e4b5864717e8b97a7b1a79a8d8074655b5044372b1f160f0b0c1017202c3845515d6775828f9ca8aea399897d7063564a3d3023170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c17232e3842505a606d79828d929c9fa4acaaa39f9d9c9b9c9e9fa09d97918a81786d67606d79849199a2a9a9a29f9895949084776a5d5144372a1e1100030f1b27333f49536874818e9ba7b4aa978a7d716453493f3327190d04000005101d2935404b5566727f8c99a5b5ab998c807366594d4033261a0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a54626c75818e949da4aca79f9d9892908f8f8f9193999a9f9e938e81796d64717d8a96a0ababa297928b88878883776a5d5144372a1e110005121f2b3744505b657783909daaaea298877b6e6154483b2d221708000000000c18242f3d4a5663707d8996abb5a89b8e8275685b4f422f24180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c66717e8b939ea6aea49d95908a86838282838486898d92989f938e81756d75828e9ba8afa39992857f7b7a7b7d706356493d3023160a000613202d394653606c7985929facac9f928579695e53463a2d211406000000000715212e3b4854616e7b8799a3aeaa9d9184776a554b4035291d100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7884919ea5afa69d928d837d7977757576777a7d81858d9299938c7f727885919eabac9f92877c726e6e6e706b6054483b2f221609000814212e3b4754616e7a8798a2aeaa9d9084776a574d42362a1e1205000000000613202d394653606c7986929facac9f928579675d5145392c20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f495364717e8b96a1acab9e948d8078706d67696869676d70747a8087919593877c7a8796a1ada89c8f82756a6261626360594f44382c201307000916222f3c4955626f7c8895aab4a99c8f8276695c4f4331251a0e020000000006121f2b3844505b667884919eabaea298867a6d6053473a2d2014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b6575828f9ba8afa4998f82776d66605c555c555d6063686d737c83909490837c8895a9b2a5988b7f726558545556544f473d32271b1004000a1724303d4a5763707d8a96a3b0a89b8e8175685b4e4235281b090000000000030f1c28333f4a546a7784909daab4aa94877b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7985929eabac9f93877b6e655c54514b4f4b5153565d616a6f7a8290959083909da9afa396897c70635649484948443d352b21160b00000b1724313e4a5764717d8a97a4b0a79a8d8174675a4e4134271b0e0100000000000b17222d43505d697683909ca9aea195887b6e6255483b2f22140c050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8897a1ada99d9083766a5f534a4540424045474c52585f686d7983909590959fabaea195887b6e6255483b3d3b38322b23190f0400000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e010000000000061d293643505c6976838f9ca9afa295887c6f6255493c2e261e170f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995a9b3a79a8d807467574e4138342f35393a41464e565d676e7b86929d9fa7b1aea194877b6e6154483b302f2c27211911070000000b1825323e4b5865717e8b98a4b1a69a8d8073675a4d4034271a0d010000000003101c2936434f5c6976828f9ca9afa295897c6f6256493f38302921180f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a5998c7f7266594c3f2f2824292c30353c444c555f69727f8b96a1acb9aea194877b6e6154483b2e21201b160f07000000000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e010000000003101d293643505c6976838f9ca9aea295887b6f6256504a423b332a21180f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0a5988c7f7265594c3f2e23181d1f2429323a434d57606d7984919eacb6aea194877b6e6154483b2e2115100b0400000000000b1724313e4a5764717d8a97a4b0a79a8d8174675a4e4134271b0e010000000003101d2a3643505d697683909ca9aea195887b6e68605c544d453c332a21170c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96abb5a6998c807366544a3f3428211e1a192028313b45515c66727f8c9aa4afaea194877b6e6154483b2e211508000000000000000a1724303d4a5763707d8a96a3b0a89b8e8175685b4e4235281b08000000000004111d2a3744505d6a7783909daab3a79a8d807a736d665e574e453c33291e150b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8899a4afa89b8e8275665c50443a322d2a262727262834404b54616e7b87939facaea194877b6e6154483b2e211508000000000000000916232f3c4956626f7c8995abb5a89c8f8275695c4f423025190e020000000005111d2935414c566b7784919eaab7a99d928d867f786e695f574e453b30271c1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86939facab9e9285796d60564c443d3a3631343333322e3946525e697784919daaaea194877b6e6154483b2e211508000000000000000815212e3b4854616e7b8799a3afaa9d9083776a564c41362a1e1105000000000713202d3946525e687985929facafa59e9b98928c837b6e6a5f574d42392e23180c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677783909dabada1978a7e71685d564f484642424140403f3f3f424d566875818e9ba8aea194877b6e6154483b2e211508000000000000000713202d3a4653606d7986929facab9f928578685e5246392d201407000000000714212e3a4754616d7a8798a2aeaa9e938f8b929590847c6e695e544a4034281e130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414b556673808c99a3afa99e91847a6d68605955534d4f4d4d4c4c4c4b4b4d5a6774808d9aa7aea194877b6e6154483b2e2115080000000000000006121f2c3844515c667784919daaada297877a6e6154473b2e21140a00000000091623303c4956636f7c8996aab4a89b8f817e85909591857b6e665c51443a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f3b4854616e7b86929fa8aca19690827a706b65615f575b5a5a5959585858585a6673808d99a6aea194877b6e6154483b2e2115080000000000000004101c2834404a546875828e9ba8b3a9968a7d7063574a3d31261b0d040000030f1b27333f495365717e8b98a4b5ab998c7f737b8390959083786d60564c4135291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e6974818d96a1aaa89f9490847d76726e696a686766666565656564646673808d99a6aea194877b6e6154483b2e21150800000000000000000c18232e3f4c5865727f8b98a8b2a6998d807366584e43372b1f15100c0b0f141f2b3744505b6574818e9ba7afa399897d706e798390958c7f73685e5246392d20150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d57606d7a849198a1a9a69f969189837e7b7876757473737272727171717173808d99a6aea194877b6e6154483b2e21150800000000000000000716222f3c4955626f7c8896a1acaa9d9083776a5f53473c31271f1c18171b1f2630394653606c7884919eabac9f92867a6d676e7b869292857a6d6154473c32271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313b45525d686f7c8692979ea6a8a09e95908b8885838280807f7f7f7e7e7e7e7d7d818e9ba8aea194877b6e6154483b2e21150800000000000000000613202d394653606c7884919eabaca095887c6f62584e4339302c282322272b2f38424d57626f7c8996a1adaa9c8f8376675f6973808d988c807366584e43372b1f130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2935414c565f6a6f7c858f949c9fa4a79f9d989792908e8d8d8c8c8b8b8b8b8a8a8a8e939eaaaea194877b6e6154483b2e211508000000000000000005121f2b3744505b6573808d99a4afa79a8e81746a5f554b423c38342e2d33373b414a545f6974818e9ba8aea2988b7e726557626e7b88969184776a6054473b2e221508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d19242f3a434e58606a6f7a82898f939a9c9fa2a9a29f9d9b9a999998989898979797979b9ea5afaea194877b6e6154483b2e2115080000000000000000030f1b27333f4953616e7b87939fabac9f92877c6f675c544e46444041413f44464c535c666e7b86929facaa9f92867a6d60575f6a78849196887c6f6255493c2f2216090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e28313c464e5860686e757d82878c8f929897999a9b9c9d9d9d9e9e9e9e9f9f9f9fa3abaeb6aea194877b6e6154483b2e2115080000000000000000000b17222d3847535f6975828f99a3aea3999083796d665f5753514a4e4e495053565e656d78829099a3aea2988d81746861646c6c75828f988b7f7265584c3f3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a343c464e565e616b70767b7f8385888a8c8d8f8f9090919191919292929292999ca4aeaea194877b6e6154483b2e21150800000000000000000006111b2b37424d57626e7b87929fa6ab9f958f81786e6a63605c545b5a535b6062686e77818e949faba69f92867b6e616c70797979818e9a8e8174675b4e4134281b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18222b343c444c52596063696e7276797c7d7f81828383848484848585858585868d929ca8aea194877b6e6154483b2e211508000000000000000000000e1a26313c47535f6a73808d949fa8a79e938f837b74706d6668676768656c6f737a828e939da6a89f948c7f726964707d8686868e939c8f8376695c504336291d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e171e252a323b41464f54575f6165666d6f71737475767677777778787878797979808d99a6aea194877b6e6154483b2e2115080000000000000000000009151f2b37424e57606d78829096a0a7a69e959087817c79767574747576797c80868f949da5a8a0969082786d6064707d8a93939b9e9d9083776a5d5044372a1d1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d1720293036393a3e3f44484d5355545c606264666768696a6a6a6b6b6b6b6c6c6c73808d99a6aea194877b6e6154483b2e21150800000000000000000000030e1a26313c44515c666e7a8490959ea5a79f99928e898583828181818385888d92989ea6a59e9691847a6d665c64707d8a979fa8aa9e9184776b5e5144382b1e110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131e29323a4146474b4c4d4e4f51524a50535557595a5c5c5d5d5e5e5e5e5f5f5f6673808d99a6aea194877b6e6154483b2e21150800000000000000000000000915202834404a545e686e7b838e939da0a7a39f9b9892908e8e8d8e9092979a9fa2a8a09e938f847b6e685e5464707d8a97a3acab9e9184786b5e5145382b1e12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a444c525457595a5b5c5d5e5b5953484a4c4e4f5050515151515252525a6774818d9aa7ada194877a6e6154473b2e2114080000000000000000000000030c18232e39424c565e696e79818990959b9fa2aaa29f9d9b9a9a9b9c9ea1a9a39f9c96918a827a6e695e565764707d8a979f9f9f9e9184786b5e5145382b1e1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36414c565e6164656768696a6b68655d534840414243434444444545454e5b6875818e9ba8b3a994877a6d6154473a2e21140700000000000000000000000007121c27303b444d565e676d747d83898e9298999b9d9e9f9f9f9f9e9d9b9999928f8a847e756d685e574d5764707d8a93939393939184786b5e5145382b1e120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e686d71727374767778756f65594d3c323536373737383837424d576976838f9ca9ada19786796d6053463a2d201307000000000000000000000000000b151e29323b444d555d606b70777d8285898c8e90919292929291908f8c8a86827e78716c605d564d4a5764707d8686868686868684786b5e5145382b1e120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a7e7f8081828485817568584e43372d2c2823292c303847535f697885929eabab9e918578665c5145382c1f130600000000000000000000000000030c172029323b434b515960636b7075797d7f82838585868685858382807d7a75716d66615a524c434955616c70797979797979797872685c5043372a1d110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b888c8d8e8f909184776a5f53473f3a38342f34383a424c56626e7b8897a2ada99c90837669544b4034281c10040000000000000000000000000000050e172029313940454f54596063676d70737576787879797978777573706d6764605c545045413a44505a61646c6c6c6c6c6c6c6b6860564b3f33271b0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535f697884919a9b9c9d96887c6f625a504a46443f434045474c545e6873808d99a9b2a89a8d8073675a4d402e23180c00000000000000000000000000000000050e171f272f353d44484f55555d606366686a6b6c6c6c6c6b6a686663605d5553504a423e35333e48505557606060606060605e5c564e443a2f23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576874818e9ba6a9a89b8e81756c605b5453504a504b5153565e666d7a85929eabaca196897c706356493d302316070000000000000000000000000000000000050d151d242933383d44484b515356595b5d5e5960636c6c6c6c64615a514b46443f3830292c363e44494a5353535353535351504b443c32281d1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313c4955626f7c88949faaaa9e938a7e726c6662605c545d555c6063686d78828f97a1ada89e9184786d6053463a2d201307000000000000000000000000000000000000030b121821272c3338394045474a4c49505a626b7078797979716c6155493a38342e261e232c33393c3d4646464646464645433f3a322a20160c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222e3b4754606a76828f98a3aea59f92877f78726e6d666a696a676d6f747a828f949ea9aaa0968b7f72665c5044382b1f12060000000000000000000000000000000000000001070c161c21272c2f35383b434b535b606c717d858686867e7164574a3e3128231c141a22282d3031393939393939393837332f2820180f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e58626f7c86929fa4aea399928b837f7b797777767777797c80868f949ea6aba3989184796d60544a3f34281c1003000000000000000000000000000000000000000000050b10161c232c343c444d555d656c737e8792979083796d6053473a2d2017110a10171c2023242d2d2d2d2d2d2d2b2a27231d160f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27323c47535f6a717e8b929fa3aaa39f95908c8886848383838486898d92989fa6a9a29992867c6f665c5142382e23170b00000000000000000000000000000000000000000000040c151c2328353e464e565e676d77808b929992867b6e675c5145382c1f130600050b10141617202020202020201e1d1b17120c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202b37434e58626c737f8a92989fa4a7a09d989992919090909192999a9fa2aaa59e9792877e716a60544b4030261c1106000000000000000000000000000000000000000000060d161e262e343f474f585f686e79818d929f938a7e71695f554b4034291c100400000004080a0a1313131313131312110f0b0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1b26323c46505a636d737e868e93999ea0a8aba39f9e9d9c9d9e9fa3aba9a29f9a938e857d716c61584e42392e1e140a000000000000000000000000000000000000000000070f171f2830383f445159616a6f7a838f939c958e81746c61574d43392f23180c000000000000000006060606060606050402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202a343f48525b636c717b81878d9196979a9c9d9e9e9f9f9f9e9d9b9997928e88817b706b615a50463c30271d0c0200000000000000000000000000000000000000000710182129313a424a505b626b707c8490959e989083796d605a50453c31271d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222d364049525a61696e747b8084888b8d8f90919292929291908e8c8985817c756e69615950483e342b1e150b0000000000000000000000000000000000000000040e18222a333b434c545c606d727d8691969f9f92867b6e675c51483e332a1f150b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101b242e37404850575e616a6e73777b7e80828484858686858483817f7c79746f6a615e574f473e362c22190c0300000000000000000000000000000000000000000a15202a343c454d565d666d747f879298a19d938a7e71695f554b40362c21180d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121c252e363e454d53585f62666a6f717375777878797979787675726f6d66625f58524d453d352c241a10070000000000000000000000000000000000000000030f1b26323c464e575f686d78808c9399a2a0958e81746c61574d43392f241a0f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131c242c333b42464e5355585f626467696a6b6b6c6c6c6b6a686663605c54534e46423b332c231a120800000000000000000000000000000000000000000006131f2b37434e585f696e7a828d929fa4a2989083796d605a50453c31271d120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a121a212931363c4347484e5355585a5c5d5e5f5f5f5f5e5d5b595653514b47433c363029201a1108000000000000000000000000000000000000000000000815212e3b47535f6a6f7b838f949da4a59f92867b6e675d51483e332a1f150b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f171f252a31373a3c4347484b4d4f51515253535251504e4c494645403937322a251f170e0800000000000000000000000000000000000000000000000916222f3c4955626f7c85919593939393938a7e71695f554b40362c21180d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a20262b2e31373a3c3e40424445454646464543423f3c3a38342e2b26201a140d050000000000000000000000000000000000000000000000000c1926323f4c5965727f868686868686868681746c61574d43392f241a0f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e151a1f21262b2e2f31343637383839393938373533302d2c28231d1b150e0902000000000000000000000000000000000000000000000000000b1825313e4a57626d727979797979797979746f645a50453c31271d120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f12151b1f21222527292a2b2c2c2c2c2b2a282623201f1c18120f0a040000000000000000000000000000000000000000000000000000000916222e3a46515b62656c6c6c6c6c6c6c6c67645c53483e332a1f150b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002060a0f121515181a1c1e1e1f20201f1e1d1b19161313100c0700000000000000000000000000000000000000000000000000000000000006121e29353f4951575960606060606060605b58534a41362c21180d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090b0d0f11121213131312100f0c090706040000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c53535353535353534e4c4841382f241a0f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111b252d353a3e3f464646464646464641403c362f261d120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090c0f111213131212100e0b0807050200000000000606060606060600000000000000000000000000000000000000000000000000000a131b23292e313239393939393939393433302b251d140b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f121515191c1d1f1f201f1f1d1b181514120e0902030607131313131313130909070300000000000000000000000000000000000000000000010a11181e2225262d2d2d2d2d2d2d2d282724201a130b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0f151a1f212226282a2c2c2c2c2b2a282521201e1a1410101213202020202020201615130f0a0400000000000000000000000000000000000000000000070d1216181920202020202020201b1a18140f0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a11171c1f262b2e2f32353738393939383634322e2d2a251f1c1c1f202c2d2d2d2d2d2d23221f1b160f07000000000000000000000000000000000000000000000106090b0c13131313131313130e0d0b080300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b141c22282b31373a3c3f4244454646454543413e3b3a36302d28282c2d39393939393939302f2c27211910070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000810181d262d33383c4347484c4f505252535252504e4b4846423b3933343845464646464646463c3b38322b23190f0400000000000000000000000000000000000000000004080a0a1313130a0a0804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a222a2f383f44464e5355595b5d5f5f5f5f5e5d5b5854524d49443e3f4452535353535353534948433d352b21160a00000000000000000000000000000000000000050b10141617202020171614100b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111a242c343c424a5053585f6265686a6b6c6c6c6b696765615e57554f464a505e5f60606060606056544f473d32271b0f0300000000000000000000000000000000000810171c2023242d2d2d2423201c171008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1a232c363e464e545b60646a6f72757778797978787674716e6964615953545c6a6c6c6c6c6c6c6c6360594f43382c1f13070000000000000000000000000000000008111a22282d303139393931302d28221a110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b18212c363e4850585f666c71777b7f8283858586858583817e7b76706c615e5c6675797979797979796f6b6054483b2f22150900000000000000000000000000000005101a232c33393c3d4646463d3c39332c231a10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2a333e48505a616a6f787e83888c8e909292929291908e8b87837d766e69606d78878686868686867c6f6356493c302316090000000000000000000000000000000b17222c363e44494a5353534a49443e362c22170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c262f3c46505a616c707c838b9095989b9d9e9f9f9f9e9c9a98948f8a827b6f6a6e7a879993939393887b6f6255483c2f221509000000000000000000000000000004101c28333e48505557606060575550483e33281c1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b17222d38424e58616c707e8690959da0a7a8aaaaa29f9e9e9e9fa39f9c948f857c6f6f7b88959f9f9f94877b6e6154483b2e21150800000000000000000000000000000814202d3944505a61646c6c6c64615a5044392d201408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a545f6a707e879298a0a7aca7a09d9898929191919299989d9f9792857c6f7c8996a2aca194877a6e6154473b2e21140800000000000000000000000000000a1623303c4955616c70797979706c6155493c3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b666e7c869299a2aaaaa29f95908b888584848586888c91959e979183797d8a96a3ada094877a6d6154473a2e21140700000000000000000000000000000a1724313d4a5764707d8686867d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1c28333f4a54606c78839098a2abaaa298928b837e7b79787778797c7f848a9297958d807e8a97a4ada093877a6d6054473a2d21140700000000000000000000000000000a1724313d4a5764707d8a938a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505b66717e8b959faaaea29892867e78726e6c656b666d6f72787e85919692877f8c99a6ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7884919da7b0a69f92867d716c6561605b545c6062656c717b8491979286929facada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a5463707d8996a0acab9f948b7e716b605b5353504b5153535b60696e7b8592999299a3aeada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2c3844505c6675818e9ba8b2a99c9083766c6159504946444045464950575e69707d8a949fa3abb4ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7985929fabada1978a7d70635a50443f393734383a3f444d57616c7683909ca9b3bdada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8998a2aeab9e9185786c6053463e332d2b282c2d333b45505a64707d8a97a1adb9ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926333f4c5966727f8c99aab3a79a8e8174665b50443827221f1c1f2227333e4653606d7985929eabb8ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b27333f49536875828e9ba8b5ab978b7e7164544a3f33281712101317212c3844505c6674818e9ba7b4ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121f2b3744505b657784919daaafa399887b6e6255483b2d2217060406101c28343f4a5464717e8b97aab4ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202d394653606c7985929facac9f9286796d6053463a2d20130600000c17232e3b4855626e7b8898a3aeada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814212e3b4754616e7a8798a3aeaa9e918477665c5144382c1f120600000613202d3a4653606d7986929facada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c8895aab4a99c90837669544a4034281c1004000006121f2b3844505c667784919eaaada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3afa89b8f8275685c4f422e23180c00000003101c28343f4a546976838f9ca9ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0a79b8e8174685b4e4135281b07000000000b17232e424f5b6875828e9ba8ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e01000000061b2834414e5b6774818e9aa7ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e010000010e1a2734414d5a6774808d9aa7ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b1a69a8d8073675a4d4034271a0d010000010d1a2734404d5a6773808d9aa6ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825313e4b5864717e8b97a4b1a79a8d8074675a4d4134271a0e010000010d1a2734404d5a6773808d9aa6ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4b5764717e8a97a4b1a79a8d8174675a4e4134271b0e010000010e1a2734414d5a6774808d9aa7ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3b0a79b8e8174685b4e4135281b06000000010e1b2834414e5b6774818e9aa7ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091623303c4956636f7c8996a2afa89b8f8275685c4f422e23170c000000020f1c2835424f5b6875828e9ba8ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222f3b4855626e7b8895a9b3a99c90837669544a3f34281c1003000004101c2834404b556976838f9ca9ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8697a1adaa9e918477665c5044382c1f1206000006131f2c3845515c677784919eaaada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d677885929eabac9f9286796d6053463a2d20130700000713202d3a4653606d7986929facada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935404b55697683909ca9aea399887b6e6255483b2f22150b00010816222f3c4955626f7c8899a3afada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f414e5a6774818d9aa7b5ab978a7e7164574b3e32271b0f0a0e131d2935414c5665727f8b98abb5ada093867a6d6053473a2d20140700000000000000000000000000000a1724313d4a5764707d8a978a7d7064574a3d3124170a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071825313e4b5864717e8b97a8b1a79a8d817467594f44382c211b1b1a1e242d3946525d6875828f9ca8b5ada093867a6d6053473a2d201407000000000000000000000002070a0a1724313d4a5764707d8a978a7d7064574a3d3124170a0a0702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8795a0acab9e9184786b6054483d332b2627262b2f35414c56616d7a86929facb9ada093867a6d6053473a2d20140700000000000000000000070d1316191924313d4a5764707d8a978a7d7064574a3d3124191916130d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e697784919dacaca196897c7063594f453d37323431373a4146525d68727f8c99a3aebbada093867a6d6053473a2d2014070000000000000000010a12191e23252626313d4a5764707d8a978a7d7064574a3d31262625231e19120a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d576673808c9aa4afa89c8f82756b60574e474341414142474c525c616d7a85929eabb0b8ada093867a6d6053473a2d20140700000000000000000a131c242a2f323333313d4a5764707d8a978a7d7064574a3d313333322f2a241c130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313b4855616e7b87939fabaa9e94897d70696058534e4e4e4e4d53565d606e75818e979c9ea6b0ada093867a6d6053473a2d2014070000000000000007121c252e353b3e403f3a3d4a5764707d8a978a7d7064574a3d3a3f403e3b352e251c1207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000914212d3a46535f6975828f99a4afa69e91857b6f6a625f585b5a5b575f62686d75808c93948f949eaaada093867a6d6053473a2d201407000000000000020d19242e3740464b4c4c47454a5764707d8a978a7d7064574a45474c4c4b4640372e24190d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d57626f7c87939fa7ada19791847c746f6a6968676869696e737a818c92938e828f9ca8ada093867a6d6053473a2d20140700000000000007131e2a3540495257595954514b5764707d8a978a7d7064574b5154595957524940352a1e1307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a26313b47535f6a74808d95a0a9a9a1969187817c787674747476787b80858e93968e817f8c99a5ada093867a6d6053473a2d2014070000000000000a16232f3b46525b636666605d555764707d8a978a7d706457555d606666635b52463b2f23160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2b37434e58606d79839097a1a8a8a199938e8885828181818285888c92979891847a7f8c99a6ada093867a6d6053473a2d2014070000000000000c1925323e4b57636d73726d67605c64707d8a978a7d70645c60676d72736d63574b3e3225190c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c45515d676e7b8591969ea5aba49f9a97918f8e8d8e8f9196999f9792867c73808c99a6ada093867a6d6053473a2d2014070000000000000d192633404c5966737f7f7a726d6764707d8a978a7d7064676d727a7f7f7366594c403326190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202935404b555f696e7b848e939c9fa4aba9a19e9c9b9a9b9c9e9f9c948f857c6f73808d99a6ada093867a6d6053473a2d20140b0500000000000e1b2734414e5a6774818c857f79716c707d8a978a7d706c71797f858c8074675a4e4134271b0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18242f39434d575f696e7a81898f93999b9d9e9f9f9f9e9c9a98948f8a827b6f6a73808d99a6ada093867a6d6053473a2d201c161008000000000e1a2734414d5a6774808d928c847e75707d8a978a7d70757e848c928d8074675a4d4134271a0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d28313c454d575f686d757c82878b8e909292929291908e8b87837d766e696673808d99a6ada093867a6d6053473a2d2c28211a11080000000815212e3b4854616e7b849095918a827b7d8a978a7d7b828a919590847b6e6154483b2e211508000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f2a333c454d565d606b6f757b7e8183858586858483817e7b76706b615e6673808d99a6ada093867a6d6053473d3c38332c231a100500000714212d3a46535e696e7a838f94938f85808d9a8d80858f94948f837a6e695e53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18212a333c444c52596063696e71747678797978787674716e696361595a6673808d99a6ada093867a6d60534d4a48443e352c21160b000005121e2a36424d575e686d79828f9497928d929d928d9297948f82796d685e574d42362a1e12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f18212a323a41454f54575e6165686a6b6c6c6c6b696765615e5759595a6673808d99a6ada093867a6d60595957554f473e33281c100400020e1a25313b454d565e676d798290959e9a9da49d9a9e959082796d675e564d453b31251a0e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1820282f353d43484d5254585b5d5f565d60666666666666666666666673808d99a6ada093867a6d6666666361594f44382c201407000009141f29333b444c555d676d7a839096a1abaeaba19690837a6d675d554c443b33291f14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d161e242932383b4246484b4e50525d686d737373737373737373737373808d99a6ada093867973737373706b6155483c2f2316090000030d172129323a434b555d686e7a849199a3afa39991847a6e685d554b433a322921170d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c131921272c30363a3b3e414754606d7a80808080808080808080808082909ca9b3a6998c80808080807d7063574a3d3024170a000000050f1720283139434c565e686f7d87929fa69f92877d6f685e564c4339312820170f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d161b1f252a2d2e323b4854616e7b878c8c8c8c8c8c8c8c8c8c8c90949fabb4a89c928c8c8c8c8c8074675a4e4134271b0e00000000050e161f27313a434c56606b727f8c949f948c7f726b60564c433a31271f160e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f141a1e20212e3b4854616e7b8794999999999999999999999c9fa6b0b9aea49c999999998d8174675a4e4134271b0e0000000000040d151f28313b444f59626d76828f998f82766d62594f443b31281f150d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090e1215212e3b4854616e7b87949f9f9f9f9f9f9f9f9f9fa6a8aeb6b9afa7a2a09f9f9a8d8174675a4e4134271b0e000000000000030d161f29323d47515b626f7c8792877c6e625b51463d32291f160d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020815212e3b4854616e7b879393939393939393939393999ca4aeb2a79d95939393938d8174675a4e4134271b0e00000000000000040d17202b343f47535f6a73808680736a5f53493f342b20170d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b4854616e7b8686868686868686868686868d929ca8aea2958b86868686868074675a4e4134271b0e0000000000000000050e19222b37434e58646e7379736e64584e43372d22190e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a46535e6976797979797979797979797979808d99a6ada093867979797979746e64584c3f33261a0d00000000000000000007101a26313c46525c64676c67645c52463c31251b100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121e2a36424d575e6c6c6c6c6c6c6c6c6c6c6c6c73808d99a6ada093867a6d6c6c6c67645c52473c3024170b000000000000000000000a15202a34404a52585a605a58524a40342a20130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25313b454d535f606060606060606060606673808d99a6aca093867a6d6060605a58524a41362b1f140800000000000000000000030e18222e3840474c4d534d4c4740382e22180e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f29333b4246485353535353535353535a6673808d999f9f9f93867a6d6053534e4c4741382f241a0e03000000000000000000000006101c262e363b3f4046403f3b362e261c0f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d17212931363a3b46464646464646464d5a6673808d9393939393867a6d605347413f3c362f261d1308000000000000000000000000000a141c242b3033343934332f2b241c140a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f171f252a2d2e39393939393939404d5a66738086868686868686796d6053473a2d302b241d140b0100000000000000000000000000020a12191f2326272d2726231f19120a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d141a1e21212d2d2d2d2d2d323f4b58636e737979797979797976675c5145382c1f1f1a130b0200000000000000000000000000000001080e1317191a201a1917130e0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e1214152020202020232f3b47525c63666c6c6c6c6c6c6c6c5c554b4034291c100e080100000000000000000000000000000000000003070b0d0d130d0d0b07020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000205070813131313131f2a36404a52585a606060606060605f514b43392f23180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060606020e19242e3840474b4d535353535353535345403931271d12070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121c262e363b3f40464646464646464638342f271f150b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141c242a2f323339393939393939392c29231d150d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a12191f2326272d2d2d2d2d2d2d2d1f1c18120b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1317191a202020202020202013100c0701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002070a0c0d13131313131313130604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070a0d101112131312110f0d09060503000000000000060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314171a1d1e1f20201f1e1c1a1613120f0b060004070713131313131313070705010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e13191d20212427292b2b2c2c2c2b292623201f1b17110d111314202020202020201413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b151a1e24292d2e3134363738393938373533302d2b27221b191d202d2d2d2d2d2d2d2d21201d19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a111720262b3035393a3d404344454646454442403c3937332d2924292c3939393939393939392d29241e160e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b141b222731373a4146474a4d505152535352514f4d4946443f38352f35394646464646464646463935302820160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d262d333c42474c5254575a5c5e5e5f5f5f5e5c595653504945403a414553535353535353535346413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e272f383f444d53565d616467696a6b6c6c6b6a686663605b53514b444c525f606060606060605f524c443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273039414950575f62686d70737677787979787775736f6c65605d554f565d6c6c6c6c6c6c6c6c6c5d564c4135291d1105000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424b535b60696e747a7d808384858686858482807c78726d6760595d68767979797979797976685d5246392d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b545c656c737b81868a8d8f9191929292918f8c89847f79706b62606d7a868686868686867a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222c3845515c666d777f878e92989a9c9d9e9f9f9e9d9b9996918c847d726d616e7b87939393939386796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c38444f59606d78818c93999fa3aaa9a8aaa29f9e9e9e9fa19e9691877f726d6e7b88959f9f9f928579655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4854606b74818e939fa4ababa39f9b979892919192939a999d99938b7f726f7c8995a2ab9e9285786b5f493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e5863707d89939da5afa8a199928e8a878584848586888c90959e92877d707c8996a3ab9e9185786b5e52452d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a7683909da5afaaa1969187817d7a79787778797c7f838b919791857a7d8a96a3ab9e9184786b5e5145382b1e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c88959fabaea29891847c75706d686b6b666d6f73787e8591958e817e8a97a3ab9e9184786b5e5145382b1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a546673808c99a7b1ab9f92867c6f6a64615e56545c6062666c717b83919388808d9aa7aa9e9184776b5e5144382b1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c667683909da9afa3998c80736a605854524c4a5153545b60696e7a8491938d929da9aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929facac9f92867a6d61584e4746414044464a50575e686f7c87929a9da4aeaa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8898a3aea99c908376685e52463c393634383a3f444d56606a73808d99a3afb7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996aab4a79a8d807467564c41342d2a282c2d333b444e58616e7b86929facb7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0a5988b7e7265584b3f30251d1c1f2228323d46525e6975828f9ba8b5aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b0a3978a7d7064574a3d312417101217202a36424d5764717e8b97a9b3aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5afa296897c6f6356493c30231609060e1a25303b4855626e7b8897a2adaa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295897c6f6256493c2f231609000913202d394653606c7985929fabaa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f2216090005121f2b3744505b657784919daaaa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900030f1b27333f49536a7683909da9aa9e9184776b5e5144382b1e08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900000b17222d424f5c6975828f9ca8aa9e9184776b5e5144382b19140d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f2216090000061c2935424f5c6875828f9ba8aa9e9184776b5e51442e2a251e19130c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e513f38363029241e160d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e504a46413b352f281f191009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b605c54524c45413a312b231b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e918477706d66615e56524c433d352d241b120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8ac9f9286817d79736e68605d564f473f362d241a0f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aea398928e8985807a746d68605950483f362c21180e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8b2a8a09e9597928d86807a6f6b625a50483e332a2015090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aca09691898d9297928d847d716c625a50463c31261a0f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e91847c80858b919691877e716c61584e43372b21170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e91847774797f858e9392877e716a5f53473e33281c1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e918477676d727a818e9392867c6e62594f44392d1e1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b60686d78818e968f82766c6155493a3025190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b565d666d798491948a7d7064564c41362a1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e545c67717e8b998f8275685e5246392d2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e4b55606d7a869292867a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e54565d67778390998a7d7064574a3d3124170a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5960636c6c75818e998d8073665a4d4033271a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b606b70797979818d9a8f8275695c4f4236291c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b63707d8686868d929d9083766a5d5043372a1d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b63707d8993939a9d9e9184776b5e5144382b1e110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b63707d89969fa7ab9e9185786b5e5245382b1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aca295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b63707d8996a3acab9e9285786b5f5245382c1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989f9f9f95887c6f6255493c2f22160900020f1c2935424f5c6875828f9b9f9f9e9184776b63707d89969f9f9f9e9285786b5f5245382c1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b9393939393887c6f6255493c2f22160900020f1c2935424f5c6875828f939393939184776b63707d8993939393939285786b5f5245382c1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f868686868686867c6f6255493c2f22160900020f1c2935424f5c68758186868686868684776b63707d8686868686868685786b5f5245382c1f120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4a56626d7279797979797979766a5f53473b2e21150800020e1b2834414d59656f75797979797979777267606b70797979797979797873685d5044372b1e110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222e3a46515b62656c6c6c6c6c6c6c625f584e43372b1f130600000c1925313d49545d65686c6c6c6c6c6c6b67605960636c6c6c6c6c6c6c6b6861574c4034281c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e29343f495156586060606060606055534e463c32261b0f0300000915212c37424b54595c6060606060605e5c564f5456606060606060605f5d574f453b2f24180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c535353535353534947433c342a20150a00000004101b26303942494d4f535353535353514f4b44484a5353535353535352504c453d33291e13070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b252d343a3e3f464646464646463c3b37322a22180e040000000009141e2730373d414246464646464644433f383c3d464646464646464544403b332b21170d02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b23292e3132393939393939392f2e2b26201810060000000000020c151e262c3134353939393939393837332c2f30393939393939393837342f2921190f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010911181e2224252d2d2d2d2d2d2d22211f1b150e0600000000000000030c141b212528292d2d2d2d2d2d2b2a272022232d2d2d2d2d2d2d2c2b28241e170f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d12151819202020202020201615130f0a0400000000000000000002091015191b1c2020202020201e1d1b131617202020202020201f1e1c18130d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106090b0c13131313131313090806030000000000000000000000000004090c0e0f13131313131311110e07090a1313131313131312110f0c07020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010507070a0d101112131312110f0d0a070603000000000000060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d111314171a1d1e1f20201f1e1c1a161312100c060005070713131313131313070704010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e13191d20212427292b2b2c2c2c2b292723201f1c17110d111314202020202020201413110d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b151a1e25292d2e3134363738393938383633302d2c28231c191d20212d2d2d2d2d2d2d21201d19130c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a111720262b3035393a3d404344454646454442403d3a38342e2a25292d3939393939393939392c29241e160e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b141b222731373a4146474a4d505152535352514f4d4946443f38363035394646464646464646463935302820160c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d151d262d333c42474c5254575a5c5e5e5f5f5f5e5c5a5653504a46413a414653535353535353535345413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b151f272f383f444e53565e616467696a6b6c6c6b6b696663605c54524c444c525f606060606060605f524c443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d273139414950575f62686d7073767778797978777573706d66615e5650565d6c6c6c6c6c6c6c6c6c5d564c4135291d1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f39434b535b606a6e747a7d808384858686858482807c79736d68615a5d68767979797979797976685d5245392c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b555c656c737b81868a8d8f9191929292918f8d8985807a716c64616d7a868686868686867a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e18222c3845515c676d7780878e92999a9c9d9e9f9f9e9e9c9997928c857e736e616e7b88939393939386796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a15202c38444f59606d79818c939a9fa3aba9a8aaa29f9e9e9e9fa29e97928a80746e6f7b88959f9f9f928579655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1b26323c4854606b74818e939fa4acaba39f9b979892919192939a999d9f928d80746f7c8996a2ab9e9285786b5f493f33271b0f030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2b37434e5863707d89939da5afa8a199928e8a878584848586888c90959e928b7f727d8996a3ab9e9185786b5e52452d22170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815212e3b47535f6a7683909da5afaaa1969187817d7a79787778797c7f838b919792877c7d8a97a3ab9e9184786b5e5145382b1e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916222f3c4955626f7c88959fabaea29891847c75706d686b6b666d6f73787e85919590837e8a97a4ab9e9184786b5e5145382b1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a546673808d99a7b1ab9f92867c6f6a64615e56545c6062666c717b8391959083909daaaa9e9184776b5e5144382b1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c667683909da9afa3998c80736a605854524c4a5153545b60696e7a8491959095a0abaa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7986929facac9f92867a6d61584e4746414044464a50575e686f7c87929da0a7b1aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8898a3aea99c908376685e52463c393634383a3f444d56606a73808d99a3afb7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996aab4a79a8d807467564c41342d2a282c2d333b444e58616e7b86929facb7aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0a5988b7e7265584b3f30251d1c1f2228323d46525e6975828f9ba8b5aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1825323e4b5865717e8b98a4b0a3978a7d7064574a3d312417101217202a36424d5764717e8b97a9b3aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1825323f4b5865727e8b98a5afa296897c6f6356493c30231609060e1a25303b4855626e7b8897a2adaa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295897c6f6256493c2f231609000913202d394653606c7985929fabaa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f2216090005121f2b3744505b657784919daaaa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900030f1b27333f49536a7683909da9aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900000b17222d424f5c6975828f9ca8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f2216090000061c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5afa295887c6f6255493c2f22160900020f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b98a5aca295887c6f6255493c2f22160900040f1c2935424f5c6875828f9ba8aa9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b989f9f9f95887c6f6255493c2f2216090b10131c2935424f5c6875828f9b9f9f9e9184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f8b9393939393887c6f6255493c2f22160f161c20222935424f5c6875828f939393939184776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1925323f4c5865727f868686868686867c6f6255493c2f22171b1f272c2f3035424f5c68758186868686868684776b5e5144382b1e11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1824313e4a56626d7279797979797979766a5f53473b2e2122272b33383c3d41444d59656f757979797979797772675c4f43372a1d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222e3a46515b62656c6c6c6c6c6c6c625f584e43372b272d33373d4448494e5152545d65686c6c6c6c6c6c6b6760564b3f33271b0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121e29343f495156586060606060606057554f473e332d33383f44464f54565a5e5f5f5e5b5c6060606060605e5c564e44392e23170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18232d373f464a4c525c64676c6c6c6361594f4438383f44495053596063676a6c6c6b67626058504a5353514f4b443c32281d1206000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b252d343a3f4c58646e74797979706b6155483e414950535b60646b707477797977746f6a605c544a3f44433f39322a20160c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009131b232934414d5a6774808686867d7063564c4a4f535b60656c71777d8184858584817c746d665c50443e2f332e2820180e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109111925323f4c5865727f8b938d8074685d55575961656c71787d83898d919292918e8780786d605a5041382d22170b0e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d899a92857a6d676363666b70787e848a90959a9d9f9f9e9a938d81756c6153493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8693978f827972707072777d838a91959da0a7a5a3a3aca49f938a7e71655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e687783909d948f847f7d7d7f848a90959da0a79f9d9896979a9fa29e9184786c605346392d201308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c5666737f8c989e96918c8a8a8c91959da0a69f9c95908b8a8a8d9297a096897d7063564a3d3024190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303b4754616e7b86929fa09e999696999da0a7a09d949089837f7d7d808591969a8d807467564c4135291d110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000814202d3a46525e69727f8c949ea5a5a3a3a5a69f9c95908a837c76727070737b84919a918477685d5246392d201307000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111e2a36424d57606d78828f939b9e9f9f9d9a94908a837d766f6b656364696f7c879395877a6d6154473a2e2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e1a25303b44515c666d79818a8e919292908d89837d77706b6360595757606a76839093897c6f6356493c3023160900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141f2834404a545c676d757d8284868584807c76706b636159544f4a4e5866737f8686867e7165584b3e3225180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c18232e39424b555c606b707578797877746f6b636159554f48443d4b57636d73797979716c62564a3d3124170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c273039434b51596163686b6c6c6a67636059554f48443e383b46525b63666c6c6c65625a50453a2e21150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e27303940454f55575b5e5f5f5d5a56544f48443e38332c354049525759606060585650483f34291d11050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151e272e343e44484a4f515352514d4948433d38332c28242e3740464b4c5353534b4a453f362d22170c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c151d232833383c3d4245464544413c3b38322c28211c1c252e353b3e404646463e3d3a342d241b11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b121821282c2f30353839393734302f2c27211c1610131c242a2f323339393932312e29221b12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c161c202324282b2c2c2a2723221f1b16100b050a12191e2325262d2d2d2524211d17110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b101416171c1e201f1e1a1615130f0a04000000070d13161919202020181715110c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000407090a0f121312110e0909070300000000000002070a0c0d1313130b0b09050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030608090c0e10111213131212110f0d0b08070502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002050a0f121515181b1d1e1f20201f1f1e1c1a181514120e09050100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e12151b1f21222528292b2c2c2c2c2b2b29272521201e1a14110d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080d141a1e20262b2e2f323436383939393938373633312e2d2a25201d19130d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d13191f252a2d31373a3c3f41434445464645454442403e3b3a36302d29251e19130c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e171e252a30363a3c4347484b4e50515253535252514f4d4b4846423b39353029241e160e07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a1117202930363b4246484e5355585b5c5e5f5f5f5f5e5e5c5a5854524d4746413a3530282019110901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141b2227323a41464d5254585f626567696b6c6c6c6c6b6a696664615e5754524c46413a322b231b13090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b141d262d333e444c52575e61666a6f727476777879797878777573716e6966615e56524c443d352d251b1309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d262f383f4450565e61696e73777b7e81838485868685858482807e7b77736d68615d564f473f372d251b1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f384149505a61686d747b8084888b8e8f919292929291918f8d8b87837f7a736d68605951493f372d231a0e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c17222d384149535b606c717a81868d9196989a9c9e9f9f9f9f9e9d9c999795908c86807a706b625b51493f352c20160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e27333f49535b656c737e858e92999ea0a8a9a19e9d9c9b9c9d9fa2aaa7a09d98928d847d726d625b51473e32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303944505b656c77808a92979fa3a8a19e999792908f8f8f909298999da0a7a29f9691877f726d62594f443a3024190d020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232e39424f59606c77808d929fa2a9a39f96918c8885838282838385888c91959ea1a8a199938b7f726b61564c4135291f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b54606b737f8c929da4a9a299928c847f7b787675757677797b7f848b9297a0a7a49f93887d70685d52453b30251a0e020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c66707d87939fa4aba29792877f79726e696a696869666c6e72787e859095a0a8a49a91847a6d60574d42362a1e110500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2834404b54606d79849199a4aea39992857d726d67625f575c5c545b6062666c717b839095a0aaa1968e8174695e52463a2d20140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515c66727f8c96a0aba89f92877d6f6b605c55534d4f4f4a5053545b60696e7a839198a3a39f92867b6e6154473b2e2114080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d7984919ea8aca1968c80736b6059514b474242423f44464a50575e686e7b86929a99928f8b8073665a4d4033271a0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111d2935414c5564717e8a96a1adaa9e9184796d60594f45403937312d3338393f444d565f6973808c8e8a86827f7b6e6155483b2e22150800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d6775828f9ca8aea2988b7e71675d51473d342e2b2622282b2d333b444d57616d7a84817d7a76726e695f53463a2d21140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212d3a4754606d7a86929facac9f92857a6d60554b403528231d1a171c1f2228323c46525e686d7774706d6765615f574d42372b1e120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a99a3aea89b8e8175675d5143392f23181d1d1d1d1d17202a36414c565e616b6764605d5555534d453c31261a0e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1a2734404d5a6773808d9aabb4aa978a7e7164554b4031272a2a2a2a2a2a2a2a2a25303a444c52545e5b5753514b4846423c332a1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b556976828f9ca9aea298887b6e6255483b2f373737373737373737373737323a414647514e4a4745403b3a373128231c140c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c3845515d677885919eabac9f9285796c6053464444444444444444444444444444444444444444444444444444443a38342e261e140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d7a8696a1adaa9d908377665b505050505050505050505050505050505050505050505050505050505046443f3830261c11060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000815222e3b4855616e7b8894a9b2a99c8f837669545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d53504a42382e23170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4956626f7c8995a2afa89b8f82756a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a605c544a3f34281c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d8996a3b0a79b8e8177777777777777777777777777777777777777777777777777777777777777776d665c5044382b1f120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724313d4a5764707d8a97a3b0ab9e92858383838383838383838383838383838383838383838383838383838383838383786d6053463a2d20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0ada197929090909090909090909090909090909090909090909090909090909090909086796c605346392d20130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1724313e4a5764717d8a97a4b0b3a9a19e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d928679655b5044372b1f120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1724303d4a5763707d8a96a3b0b8b0aba99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faaaaaaaaaa9f9285786c5f493f33271b0f0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1623303d495663707c8996a3afb0a69f9c93939393939393939393939393939393939393939393939393a0a8b2ab9e9185786b5e52452d22170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000915222f3c4855626f7b8895aab3ab9f948f8686868686868686868686868686868686868686868686868996a0acaa9d9083776a5d5044372a1d060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a8798a2aea99c8f8279797979797979797979797979797979797979797979797984919eaaa99c8f8276695c4f4336291c100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525d687885929fabaa9d9084776c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d7986929faca79a8d8174675a4e4134271b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2935414c566a7683909da9ab9f928578695e606060606060606060606060606060606060626e7b8899a3afab988b7f7265584c3f3225190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d192430414e5a6774818d9aabada297877b6e6154535353535353535353535353535353535764717d8a97abaea399897c706356493d3023160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081724313e4a5764717e8a99a4afa9978b7e7164564d41464646464646464646464646434f596774818e9aa7ac9f92867a6d6053473a2d201407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e3a4754616d7a86939faca89b8e8175685e52463c313939393939393939313a4854606b7884919eaba99d908376675d5145392c1f1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3946525e6876838f9ca9ac9f92867b6e61584e433a322c292424292c323a434e58636f7c8996a1aca6998c7f7266554b4035291d10040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111d2a36414c5665717e8b97a1ada3998d80736a5f554c443d39352f2f35393d444c56606a75828f9ca8ab9f94887b6e6155483b2f24180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d1925303a4753606d7985919ea8ab9f92867c6f675e564f47454041414045474e565d686f7c87939faca69c8f8276695f53463a2d1d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131f2c3845515c67727f8c96a0aba3989183796d68605953514b4e4e4b51535860686d7a84919aa4aa9f94897d7063574d42362a1e0b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c2934404b55606d79849199a3aaa09590837a706b64605d555b5b555d60636a6f7a828f96a0aca3988f82766b6055453b31261a0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c18232f3945515c67707d87929fa4a79f9590847d75706d6769676869676d70757c848f949fa8a49f92867c6f62594f44332a1f1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2834404b55606b727f8c929da4a79f969189827d7a7675747475777a7d828991969fa6a49d928b7f726a5f53473d3321180e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c18232e39434f59636d74808d929fa2a8a09e948f8a86838281818283868a8f949ea0a8a29f928d80746d62584e43352c210f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d27303d47515b606c77808a92979fa3a69e9c9992908f8e8e8f9092999c9ea6a49f98928b80776c605b51463c31231a0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151e2b353f44505b656c737e858e92999ea1a8a39f9d9c9a9b9c9d9fa3a9a19e9a938f867e746c655b50493f342a201108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c192327333f49535b606c717a81878d9196989b9c9e9f9f9f9f9e9c9b9897928d87827b716c605b53493f372d22180e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071117222d384149505a61686e747b8084888b8e90919292929291908e8c8985817b756e69625a504941382d251b100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111b262f383f4450565e61696e73787c7f818384858686858483817f7c79746e6a615e5750443f382f261b130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141d2c353d44484c52575e61656c6f7274767878797978787675726f6d66625f58534d5345413a32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101c27333d474f5556606060605b60626568696b6c6c6c6c6b69686562605c54606060605f524c443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202c38444f5961636c6c6c6c69615d565b5d5e5f5f5f5f5e5d5b59575f616a6c6c6c6c6c5d564c4135291d11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000916232f3c4855616b7079797979756d686058515152535352514b515a61696e777979797976685d5245392c2013070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1723303d4a5663707d86868686827a6f6a625b524c4446464e555d606c717b83868686867a6d6054473a2d2114070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000713202d3a4653606d78828f95948f847c726d605d564e4550585f676d747e869095938c8073685d5245392c20130700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121f2b3844505c666d798390979691877f756d686058515a626a6f79818a9298958e81776c60564c4135291d110400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101c28343f4a545d676e7b85929899928c827a6f6a625d606c717c838e939f969083796d655b50443a3024190d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c151d232e38424c555f696f7d86929f9f938f847c726d676d757e8690959d9891847a6e675d53493f32281e13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f171e272e343f464e5457606b717e8b929c9e9691877f757079818b9298a09992867c6f685e554b41382d20160c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001071119212930394045505860626b6c6c73808d939ea199928c827c848e939fa29f93877e706a5f564c43392f261b0e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c1218232b333b424b515a626a6f7879797979818e959fa39f938f8991969ea59d938c7f726c61584e443b31271d140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d161d2429353d454d545c606c717c848686867f79839096a1a59e9b969ea0a89f948e81746d635a50463c32291f150b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c161f282f353f474f575e666d747e8691969184796e7b849198a29f9f9f9fa9a0968f82786d605b51473e342a20170d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121d2831394045515960696e78818b9298958b7e71696f7c86929a93939393939791847a6d665c51493f352c22180e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d18242f39434b515b626b707b838e939f9a9083786c606a707e8786868686868686857b6e685e544a40372d231a10060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101d2935404b555d606d727d8590959d9f93877c6f655b616c707979797979797979786e695f564c42392e251c110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613202c3945515d676d757f8792979fa2978e81746a60535a61646c6c6c6c6c6c6c6c6c625f574d443a30271c130a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202d3a4753606d79818c929993939392857a6d61584e50555760606060606060605f55534d453c32281e150b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d2a3744505d6a778386868686868686867f72685e524644494a5353535353535353524847423c332a20160c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2936424f5b6671777979797979797979726d62564c41393c3d4646464646464646453b3a37312a21180e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a26333e4a555f666a6c6c6c6c6c6c6c6c65625b51443a3030313939393939393939392f2e2b2620180f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a16222d39434d555b5d6060606060606060595751493f322923242d2d2d2d2d2d2d2d2c22211e1a150e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111c27313b434a4f5053535353535353534c4a463f372d20171720202020202020201f1514120e09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151f2931393e424446464646464646463f3e3a352d251b0e0a131313131313131312080806020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d171f272d333637393939393939393932312e29231b13090006060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d151c2226292a2d2d2d2d2d2d2d2d2625221e18110901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b11161a1d1d2020202020202020191816120d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0e101113131313131313130c0b0906010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
m_StreamData:
serializedVersion: 2
offset: 0