move some UI-specific stuff from MethodsModule to UserInterfaceModule
This commit is contained in:
parent
b417342093
commit
41d7fb1959
@ -190,8 +190,10 @@ namespace Mocha.Core
|
||||
public static class GetRelationship
|
||||
{
|
||||
public static Guid Instance__get__Parent_Class { get; } = new Guid("{bac8c59f-8994-41e8-b0c0-659ec8efc4e2}");
|
||||
// public static Guid Method__get__Parent_Class__HACK { get; } = new Guid("{89034a1c-50e5-47a1-abb8-076ece5343a8}");
|
||||
}
|
||||
|
||||
public static Guid Instance__get__Parent_Class__for__Method_Binding__HACK { get; set; }
|
||||
// public static Guid Method__get__Parent_Class__HACK { get; } = new Guid("{89034a1c-50e5-47a1-abb8-076ece5343a8}");
|
||||
}
|
||||
public static class ConditionalSelectAttribute
|
||||
{
|
||||
public static Guid Method__get__Method_Abbreviation { get; } = new Guid("{f0c64709-385d-481b-8f58-83e507fb261c}");
|
||||
|
||||
@ -297,6 +297,7 @@ namespace Mocha.Core
|
||||
public static Guid Instance__for__Element_Content { get; } = new Guid("{c3959f84-248d-4ede-a3f2-f262917c7b56}");
|
||||
|
||||
public static Guid Element_Content__has__Element_Content_Display_Option { get; } = new Guid("{f070dfa7-6260-4488-a779-fae291903f2d}");
|
||||
public static Guid Element_Content_Display_Option__for__Element_Content { get; } = new Guid("{12fe7923-b3d2-4152-96c7-a901410b3466}");
|
||||
|
||||
public static Guid Element_Content__has__Parameter_Assignment { get; } = new Guid("{51214ef0-458a-44fa-8b9d-f3d9d2309388}");
|
||||
public static Guid Parameter__assigned_from__Element_Content { get; } = new Guid("{dcef180b-a2ca-4d87-bb05-b946c319b562}");
|
||||
|
||||
@ -32,11 +32,11 @@ public class MethodsModule : MiniOmsModule
|
||||
private InstanceHandle c_WorkData, c_OMS;
|
||||
private InstanceHandle c_ParameterAssignment, c_Method, c_MethodBinding;
|
||||
private InstanceHandle a_Name, a_Order, a_Singular, a_Verb, a_Static, a_UseAnyCondition, a_Value;
|
||||
private InstanceHandle c_ReturnAttributeMethodBinding, c_ReturnInstanceSetMethodBinding, c_ReturnElementMethodBinding, c_BuildResponseMethodBinding;
|
||||
private InstanceHandle c_ReturnAttributeMethodBinding, c_ReturnInstanceSetMethodBinding, c_ReturnElementMethodBinding;
|
||||
private InstanceHandle c_CommonText, c_CommonBoolean, c_CommonNumeric, c_CommonDate, c_CommonInstanceSet;
|
||||
private InstanceHandle c_ConditionGroup;
|
||||
private InstanceHandle c_BuildAttributeMethod, c_GetAttributeMethod, c_GetSpecifiedInstancesMethod, c_GetAttributeBySystemRoutineMethod, c_AssignAttributeMethod, c_GetRelationshipMethod, c_GetReferencedAttributeMethod, c_SelectFromInstanceSetMethod, c_ConditionalSelectFromInstanceSetCase, c_ConditionalSelectFromInstanceSetMethod, c_ConditionalSelectAttributeMethod, c_ConditionalSelectAttributeCase, c_EvaluateBooleanExpressionMethod, c_BuildUIResponseMethod, c_ControlTransactionMethod;
|
||||
private InstanceHandle c_ExecutableReturningAttribute, c_ExecutableReturningInstanceSet, c_ExecutableReturningElement, c_ExecutableReturningWorkData;
|
||||
private InstanceHandle c_BuildAttributeMethod, c_GetAttributeMethod, c_GetSpecifiedInstancesMethod, c_GetAttributeBySystemRoutineMethod, c_AssignAttributeMethod, c_GetRelationshipMethod, c_GetReferencedAttributeMethod, c_SelectFromInstanceSetMethod, c_ConditionalSelectFromInstanceSetCase, c_ConditionalSelectFromInstanceSetMethod, c_ConditionalSelectAttributeMethod, c_ConditionalSelectAttributeCase, c_EvaluateBooleanExpressionMethod;
|
||||
private InstanceHandle c_ExecutableReturningAttribute, c_ExecutableReturningInstanceSet, c_ExecutableReturningWorkData;
|
||||
private InstanceHandle c_AccessModifier, i_AccessModifier_Private, i_AccessModifier_Protected, i_AccessModifier_Public, i_AccessModifier_RootA2;
|
||||
private InstanceHandle c_SystemRoutine, c_SystemAttributeRoutine, c_SystemInstanceSetRoutine;
|
||||
private InstanceHandle c_AccumulationFunction, c_SelectionFunction, c_SetFunction;
|
||||
@ -44,14 +44,10 @@ public class MethodsModule : MiniOmsModule
|
||||
|
||||
protected override void BuildInternal(Oms oms)
|
||||
{
|
||||
c_Element = oms.CreateClass("Element", KnownInstanceGuids.Classes.Element);
|
||||
c_ElementContent = oms.CreateClass("Element Content", KnownInstanceGuids.Classes.ElementContent);
|
||||
oms.CreateRelationship(c_Element, "has", c_ElementContent, KnownRelationshipGuids.Element__has__Element_Content, false, "for", KnownRelationshipGuids.Element_Content__for__Element);
|
||||
oms.CreateRelationship(c_ElementContent, "has", c_Instance, KnownRelationshipGuids.Element_Content__has__Instance, true, "has", KnownRelationshipGuids.Instance__for__Element_Content);
|
||||
|
||||
a_Name = oms.GetInstance(KnownAttributeGuids.Text.Name);
|
||||
|
||||
c_ExecutableReturningAttribute = oms.CreateClass("Executable returning Attribute", KnownInstanceGuids.Classes.ExecutableReturningAttribute);
|
||||
c_ExecutableReturningInstanceSet = oms.CreateClass("Executable returning Instance Set", KnownInstanceGuids.Classes.ExecutableReturningInstanceSet);
|
||||
c_ExecutableReturningElement = oms.CreateClass("Executable returning Element", KnownInstanceGuids.Classes.ExecutableReturningElement);
|
||||
c_ExecutableReturningWorkData = oms.CreateClass("Executable returning Work Data", KnownInstanceGuids.Classes.ExecutableReturningWorkData);
|
||||
|
||||
oms.AddSuperClass(c_Attribute, c_ExecutableReturningAttribute);
|
||||
@ -75,9 +71,6 @@ public class MethodsModule : MiniOmsModule
|
||||
c_ReturnElementMethodBinding = oms.CreateClass("Return Element Method Binding", KnownInstanceGuids.Classes.ReturnElementMethodBinding);
|
||||
oms.AddSuperClass(c_ReturnElementMethodBinding, c_MethodBinding);
|
||||
|
||||
c_BuildResponseMethodBinding = oms.CreateClass("Build Response Method Binding", KnownInstanceGuids.Classes.BuildResponseMethodBinding);
|
||||
oms.AddSuperClass(c_BuildResponseMethodBinding, c_MethodBinding);
|
||||
|
||||
// c_ReturnWorkDataMethodBinding = oms.CreateClass("Return Work Data Method Binding", KnownInstanceGuids.Classes.ReturnWorkDataMethodBinding);
|
||||
|
||||
c_AccumulationFunction = oms.CreateEnumeration(KnownInstanceGuids.Classes.AccumulationFunction, new Guid[]
|
||||
@ -91,7 +84,6 @@ public class MethodsModule : MiniOmsModule
|
||||
KnownInstanceGuids.SelectionFunctions.Minimum
|
||||
});
|
||||
|
||||
a_Name = oms.GetInstance(KnownAttributeGuids.Text.Name);
|
||||
a_Order = oms.GetInstance(KnownAttributeGuids.Text.Order);
|
||||
a_Verb = oms.CreateInstanceOf(c_TextAttribute, KnownAttributeGuids.Text.Verb);
|
||||
a_Static = oms.CreateInstanceOf(c_BooleanAttribute, KnownAttributeGuids.Boolean.Static);
|
||||
@ -206,15 +198,6 @@ public class MethodsModule : MiniOmsModule
|
||||
oms.CreateRelationship(c_ConditionalSelectAttributeMethod, "has", c_ConditionalSelectAttributeCase, KnownRelationshipGuids.Conditional_Select_Attribute_Method__has__Conditional_Select_Attribute_Case, false, "for", KnownRelationshipGuids.Conditional_Select_Attribute_Case__for__Conditional_Select_Attribute_Method);
|
||||
oms.AddSuperClass(c_ConditionalSelectAttributeMethod, c_Method);
|
||||
|
||||
c_BuildUIResponseMethod = oms.CreateClass("BUIR - Build UI Response Method", KnownInstanceGuids.MethodClasses.BuildUIResponseMethod);
|
||||
oms.CreateRelationship(c_BuildUIResponseMethod, "uses", c_ExecutableReturningElement, KnownRelationshipGuids.Build_UI_Response_Method__uses__Executable_returning_Element, true, "used by", KnownRelationshipGuids.Executable_returning_Element__used_by__Build_UI_Response_Method);
|
||||
oms.AddSuperClass(c_BuildUIResponseMethod, c_Method);
|
||||
|
||||
c_ControlTransactionMethod = oms.CreateClass("CT - Control Transaction Method", KnownInstanceGuids.MethodClasses.ControlTransactionMethod);
|
||||
oms.CreateRelationship(c_ControlTransactionMethod, "processes", c_Element, KnownRelationshipGuids.Control_Transaction_Method__processes__Element, true, "processed by", KnownRelationshipGuids.Element__processed_by__Control_Transaction_Method);
|
||||
oms.CreateRelationship(c_ControlTransactionMethod, "uses", c_BuildResponseMethodBinding, KnownRelationshipGuids.Control_Transaction_Method__uses__Build_Response_Method_Binding, true, "used by", KnownRelationshipGuids.Build_Response_Method_Binding__used_by__Control_Transaction_Method);
|
||||
oms.AddSuperClass(c_ControlTransactionMethod, c_Method);
|
||||
|
||||
InstanceHandle c_BooleanOperator = oms.CreateClass("Boolean Operator", KnownInstanceGuids.Classes.BooleanOperator);
|
||||
InstanceHandle c_RelationalOperator = oms.CreateClass("Relational Operator", KnownInstanceGuids.Classes.RelationalOperator);
|
||||
|
||||
@ -298,12 +281,8 @@ public class MethodsModule : MiniOmsModule
|
||||
BuildAttributeMethod Method__get__GR_Method_Suffix = mb.CreateBuildAttributeMethod(c_Method, "get", "GR Method Suffix", AccessModifier.Public, true, a_Value, "GR");
|
||||
EvaluateBooleanExpressionMethod Method__is__Get_Relationship_Method = mb.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "GR", AccessModifier.Public, false, oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.Handle, RelationalOperator.InSelectionList, oms.GetInstance(KnownInstanceGuids.MethodClasses.GetRelationshipMethod));
|
||||
|
||||
BuildAttributeMethod Method__get__CT_Method_Suffix = mb.CreateBuildAttributeMethod(c_Method, "get", "CT Method Suffix", AccessModifier.Public, true, a_Value, "CT");
|
||||
EvaluateBooleanExpressionMethod Method__is__CT = mb.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "CT", AccessModifier.Public, false, oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.Handle, RelationalOperator.InSelectionList, oms.GetInstance(KnownInstanceGuids.MethodClasses.ControlTransactionMethod));
|
||||
|
||||
mb.CreateConditionalSelectAttributeMethod(c_Method, "get", "Method Abbreviation", AccessModifier.Public, false, KnownInstanceGuids.Methods.ConditionalSelectAttribute.Method__get__Method_Abbreviation, a_Value, new ConditionalSelectAttributeCase[]
|
||||
{
|
||||
new ConditionalSelectAttributeCase(new IExecutableReturningAttribute[] { Method__is__CT.CreateMethodBinding(oms) }, null, false, Method__get__CT_Method_Suffix.CreateMethodBinding(oms)),
|
||||
new ConditionalSelectAttributeCase(new IExecutableReturningAttribute[] { Method__is__Get_Attribute_by_System_Routine_Method.CreateMethodBinding(oms) }, null, false, Method__get__GAS_Method_Suffix.CreateMethodBinding(oms)),
|
||||
new ConditionalSelectAttributeCase(new IExecutableReturningAttribute[] { Method__is__Get_Relationship_Method.CreateMethodBinding(oms) }, null, false, Method__get__GR_Method_Suffix.CreateMethodBinding(oms)),
|
||||
new ConditionalSelectAttributeCase(new IExecutableReturningAttribute[] { Method__is__Conditional_Select_Attribute_Method.CreateMethodBinding(oms) }, null, false, Method__get__SAC_Method_Suffix.CreateMethodBinding(oms))
|
||||
@ -319,6 +298,7 @@ public class MethodsModule : MiniOmsModule
|
||||
{
|
||||
new KeyValuePair<InstanceHandle, object?>(c_Instance, c_MethodBinding)
|
||||
});
|
||||
KnownInstanceGuids.Methods.GetRelationship.Instance__get__Parent_Class__for__Method_Binding__HACK = oms.GetGlobalIdentifier(Instance__get__Parent_Class_rsmb.Handle);
|
||||
|
||||
// RAMB
|
||||
BuildAttributeMethod Method_Binding__get__RAMB_Method_Binding_Suffix = mb.CreateBuildAttributeMethod(c_MethodBinding, "get", "RAMB Method Suffix", AccessModifier.Public, true, a_Value, "ramb");
|
||||
@ -334,7 +314,7 @@ public class MethodsModule : MiniOmsModule
|
||||
EvaluateBooleanExpressionMethod Method_Binding__is__Return_Instance_Set_Method_Binding = mb.CreateEvaluateBooleanExpressionMethod(c_MethodBinding, "is", "RSMB", AccessModifier.Public, false, oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb.Handle, RelationalOperator.InSelectionList, oms.GetInstance(KnownInstanceGuids.Classes.ReturnInstanceSetMethodBinding));
|
||||
ReturnAttributeMethodBinding Method_Binding__is__Return_Instance_Set_Method_Binding_ramb = Method_Binding__is__Return_Instance_Set_Method_Binding.CreateMethodBinding(oms);
|
||||
|
||||
mb.CreateConditionalSelectAttributeMethod(c_MethodBinding, "get", "Method Binding Abbreviation", AccessModifier.Public, false, KnownInstanceGuids.Methods.ConditionalSelectAttribute.Method_Binding__get__Method_Binding_Abbreviation, a_Value, new ConditionalSelectAttributeCase[]
|
||||
ConditionalSelectAttributeMethod sac = mb.CreateConditionalSelectAttributeMethod(c_MethodBinding, "get", "Method Binding Abbreviation", AccessModifier.Public, false, KnownInstanceGuids.Methods.ConditionalSelectAttribute.Method_Binding__get__Method_Binding_Abbreviation, a_Value, new ConditionalSelectAttributeCase[]
|
||||
{
|
||||
new ConditionalSelectAttributeCase(new IExecutableReturningAttribute[] { Method_Binding__is__Return_Attribute_Method_Binding_ramb }, null, false, Method_Binding__get__RAMB_Method_Binding_Suffix_ramb),
|
||||
new ConditionalSelectAttributeCase(new IExecutableReturningAttribute[] { Method_Binding__is__Return_Instance_Set_Method_Binding_ramb }, null, false, Method_Binding__get__RSMB_Method_Binding_Suffix_ramb)
|
||||
|
||||
@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Reflection.Emit;
|
||||
using Mocha.Core.Oop;
|
||||
using Mocha.Core.Oop.Methods;
|
||||
|
||||
namespace Mocha.Core.OmsImplementations.Mini.Modules;
|
||||
|
||||
public class UserInterfaceModule : MiniOmsModule
|
||||
{
|
||||
private InstanceHandle c_Element, c_ElementContent;
|
||||
private InstanceHandle r_User__has__Role;
|
||||
private InstanceHandle a_Name;
|
||||
private InstanceHandle c_ExecutableReturningElement;
|
||||
private InstanceHandle c_ElementContentDisplayOption;
|
||||
private InstanceHandle c_Method, c_MethodBinding, c_BuildUIResponseMethod, c_ControlTransactionMethod;
|
||||
private InstanceHandle c_BuildResponseMethodBinding;
|
||||
|
||||
protected override void BuildInternal(Oms oms)
|
||||
{
|
||||
a_Name = oms.GetInstance(KnownAttributeGuids.Text.Name);
|
||||
c_Method = oms.GetInstance(KnownInstanceGuids.Classes.Method);
|
||||
c_MethodBinding = oms.GetInstance(KnownInstanceGuids.Classes.MethodBinding);
|
||||
|
||||
c_Element = oms.CreateClass("Element", KnownInstanceGuids.Classes.Element);
|
||||
oms.AddAttribute(c_Element, a_Name);
|
||||
|
||||
c_ElementContent = oms.CreateClass("Element Content", KnownInstanceGuids.Classes.ElementContent);
|
||||
|
||||
oms.CreateRelationship(c_Element, "has", c_ElementContent, KnownRelationshipGuids.Element__has__Element_Content, false, "for", KnownRelationshipGuids.Element_Content__for__Element);
|
||||
oms.CreateRelationship(c_ElementContent, "has", c_Instance, KnownRelationshipGuids.Element_Content__has__Instance, true, "has", KnownRelationshipGuids.Instance__for__Element_Content);
|
||||
oms.CreateRelationship(c_ElementContent, "has", c_ElementContentDisplayOption, KnownRelationshipGuids.Element_Content__has__Element_Content_Display_Option, false, "for", KnownRelationshipGuids.Element_Content_Display_Option__for__Element_Content);
|
||||
|
||||
c_ExecutableReturningElement = oms.CreateClass("Executable returning Element", KnownInstanceGuids.Classes.ExecutableReturningElement);
|
||||
|
||||
c_BuildResponseMethodBinding = oms.CreateClass("Build Response Method Binding", KnownInstanceGuids.Classes.BuildResponseMethodBinding);
|
||||
oms.AddSuperClass(c_BuildResponseMethodBinding, c_MethodBinding);
|
||||
|
||||
c_BuildUIResponseMethod = oms.CreateClass("BUIR - Build UI Response Method", KnownInstanceGuids.MethodClasses.BuildUIResponseMethod);
|
||||
oms.CreateRelationship(c_BuildUIResponseMethod, "uses", c_ExecutableReturningElement, KnownRelationshipGuids.Build_UI_Response_Method__uses__Executable_returning_Element, true, "used by", KnownRelationshipGuids.Executable_returning_Element__used_by__Build_UI_Response_Method);
|
||||
oms.AddSuperClass(c_BuildUIResponseMethod, c_Method);
|
||||
|
||||
c_ControlTransactionMethod = oms.CreateClass("CT - Control Transaction Method", KnownInstanceGuids.MethodClasses.ControlTransactionMethod);
|
||||
oms.CreateRelationship(c_ControlTransactionMethod, "processes", c_Element, KnownRelationshipGuids.Control_Transaction_Method__processes__Element, true, "processed by", KnownRelationshipGuids.Element__processed_by__Control_Transaction_Method);
|
||||
oms.CreateRelationship(c_ControlTransactionMethod, "uses", c_BuildResponseMethodBinding, KnownRelationshipGuids.Control_Transaction_Method__uses__Build_Response_Method_Binding, true, "used by", KnownRelationshipGuids.Build_Response_Method_Binding__used_by__Control_Transaction_Method);
|
||||
oms.AddSuperClass(c_ControlTransactionMethod, c_Method);
|
||||
|
||||
InstanceHandle i_Method__get__Method_Abbreviation = oms.GetInstance(KnownInstanceGuids.Methods.ConditionalSelectAttribute.Method__get__Method_Abbreviation);
|
||||
|
||||
OmsMethodBuilder mb = new OmsMethodBuilder(oms);
|
||||
|
||||
InstanceHandle Method_Binding__get__Method_Binding_Abbreviation = oms.GetInstance(KnownInstanceGuids.Methods.ConditionalSelectAttribute.Method_Binding__get__Method_Binding_Abbreviation);
|
||||
InstanceHandle a_Value = oms.GetInstance(KnownAttributeGuids.Text.Value);
|
||||
InstanceHandle Instance__get__Parent_Class_rsmb = oms.GetInstance(KnownInstanceGuids.Methods.GetRelationship.Instance__get__Parent_Class__for__Method_Binding__HACK);
|
||||
BuildAttributeMethod Method__get__CT_Method_Suffix = mb.CreateBuildAttributeMethod(c_Method, "get", "CT Method Suffix", AccessModifier.Public, true, a_Value, "CT");
|
||||
EvaluateBooleanExpressionMethod Method__is__CT = mb.CreateEvaluateBooleanExpressionMethod(c_Method, "is", "CT", AccessModifier.Public, false, oms.GetInstance(KnownAttributeGuids.Boolean.MethodIsOfTypeSpecified), Instance__get__Parent_Class_rsmb, RelationalOperator.InSelectionList, oms.GetInstance(KnownInstanceGuids.MethodClasses.ControlTransactionMethod));
|
||||
|
||||
ConditionalSelectAttributeCase i_CT_Case = new ConditionalSelectAttributeCase(new IExecutableReturningAttribute[] { Method__is__CT.CreateMethodBinding(oms) }, null, false, Method__get__CT_Method_Suffix.CreateMethodBinding(oms));
|
||||
mb.AddConditionalSelectAttributeCase(new ConditionalSelectAttributeMethod(Method_Binding__get__Method_Binding_Abbreviation), i_CT_Case);
|
||||
}
|
||||
}
|
||||
@ -35,7 +35,6 @@ public class OmsMethodBuilder
|
||||
c_ReturnAttributeMethodBinding = Oms.GetInstance(KnownInstanceGuids.Classes.ReturnAttributeMethodBinding);
|
||||
c_ReturnInstanceSetMethodBinding = Oms.GetInstance(KnownInstanceGuids.Classes.ReturnInstanceSetMethodBinding);
|
||||
c_ReturnElementMethodBinding = Oms.GetInstance(KnownInstanceGuids.Classes.ReturnElementMethodBinding);
|
||||
c_BuildResponseMethodBinding = oms.GetInstance(KnownInstanceGuids.Classes.BuildResponseMethodBinding);
|
||||
}
|
||||
|
||||
public ReturnAttributeMethodBinding CreateReturnAttributeMethodBinding(MethodReturningAttribute method)
|
||||
@ -58,6 +57,11 @@ public class OmsMethodBuilder
|
||||
}
|
||||
public BuildResponseMethodBinding CreateBuildResponseMethodBinding(MethodBuildingResponse method)
|
||||
{
|
||||
if (c_BuildResponseMethodBinding == InstanceHandle.Empty)
|
||||
{
|
||||
c_BuildResponseMethodBinding = Oms.GetInstance(KnownInstanceGuids.Classes.BuildResponseMethodBinding);
|
||||
}
|
||||
|
||||
InstanceHandle methodBinding = Oms.CreateInstanceOf(c_BuildResponseMethodBinding);
|
||||
Oms.AssignRelationship(methodBinding, Oms.GetInstance(KnownRelationshipGuids.Method_Binding__executes__Method), method.Handle);
|
||||
return new BuildResponseMethodBinding(methodBinding);
|
||||
@ -322,4 +326,10 @@ public class OmsMethodBuilder
|
||||
Oms.AssignRelationship(method, r_Control_Transaction_Method__uses__Build_Response_Method_Binding, usesBuildResponseMethodBinding.Handle);
|
||||
return new ControlTransactionMethod(method);
|
||||
}
|
||||
|
||||
public void AddConditionalSelectAttributeCase(ConditionalSelectAttributeMethod method, ConditionalSelectAttributeCase cas)
|
||||
{
|
||||
InstanceHandle ihCase = CreateConditionalSelectAttributeCase(cas);
|
||||
Oms.AssignRelationship(method.Handle, Oms.GetInstance(KnownRelationshipGuids.Conditional_Select_Attribute_Method__has__Conditional_Select_Attribute_Case), ihCase);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user