mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
verb subcat patterns
This commit is contained in:
@@ -11,7 +11,9 @@ abstract Adverb = Cat ** {
|
|||||||
AdAdv : AdA -> Adv -> Adv ;
|
AdAdv : AdA -> Adv -> Adv ;
|
||||||
|
|
||||||
SubjS : Subj -> S -> Adv ;
|
SubjS : Subj -> S -> Adv ;
|
||||||
|
AdvSC : SC -> Adv ;
|
||||||
|
|
||||||
AdnCAdv : CAdv -> AdN ;
|
AdnCAdv : CAdv -> AdN ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
abstract Basic = Cat ** {
|
abstract Basic = Cat ** {
|
||||||
fun
|
fun
|
||||||
airplane_N : N ;
|
airplane_N : N ;
|
||||||
-- answer_V2S : V2S ;
|
answer_V2S : V2 ;
|
||||||
apartment_N : N ;
|
apartment_N : N ;
|
||||||
apple_N : N ;
|
apple_N : N ;
|
||||||
art_N : N ;
|
art_N : N ;
|
||||||
-- ask_V2Q : V2Q ;
|
ask_V2Q : V2 ;
|
||||||
baby_N : N ;
|
baby_N : N ;
|
||||||
bad_A : A ;
|
bad_A : A ;
|
||||||
bank_N : N ;
|
bank_N : N ;
|
||||||
beautiful_A : A ;
|
beautiful_A : A ;
|
||||||
-- become_VA : VA ;
|
become_VA : VA ;
|
||||||
beer_N : N ;
|
beer_N : N ;
|
||||||
-- beg_V2V : V2V ;
|
beg_V2V : V2 ;
|
||||||
big_A : A ;
|
big_A : A ;
|
||||||
bike_N : N ;
|
bike_N : N ;
|
||||||
bird_N : N ;
|
bird_N : N ;
|
||||||
@@ -58,7 +58,7 @@ abstract Basic = Cat ** {
|
|||||||
dog_N : N ;
|
dog_N : N ;
|
||||||
door_N : N ;
|
door_N : N ;
|
||||||
drink_V2 : V2 ;
|
drink_V2 : V2 ;
|
||||||
-- easy_A2V : A2V ;
|
easy_A2V : A2 ;
|
||||||
eat_V2 : V2 ;
|
eat_V2 : V2 ;
|
||||||
enemy_N : N ;
|
enemy_N : N ;
|
||||||
empty_A : A ;
|
empty_A : A ;
|
||||||
@@ -72,7 +72,7 @@ abstract Basic = Cat ** {
|
|||||||
fridge_N : N ;
|
fridge_N : N ;
|
||||||
friend_N : N ;
|
friend_N : N ;
|
||||||
fruit_N : N ;
|
fruit_N : N ;
|
||||||
-- fun_AV : AV ;
|
fun_AV : A ;
|
||||||
garden_N : N ;
|
garden_N : N ;
|
||||||
girl_N : N ;
|
girl_N : N ;
|
||||||
glove_N : N ;
|
glove_N : N ;
|
||||||
@@ -121,7 +121,7 @@ abstract Basic = Cat ** {
|
|||||||
oil_N : N ;
|
oil_N : N ;
|
||||||
old_A : A ;
|
old_A : A ;
|
||||||
open_V2 : V2 ;
|
open_V2 : V2 ;
|
||||||
-- paint_V2A : V2A ;
|
paint_V2A : V2A ;
|
||||||
paper_N : N ;
|
paper_N : N ;
|
||||||
peace_N : N ;
|
peace_N : N ;
|
||||||
pen_N : N ;
|
pen_N : N ;
|
||||||
@@ -130,10 +130,10 @@ abstract Basic = Cat ** {
|
|||||||
play_V2 : V2 ;
|
play_V2 : V2 ;
|
||||||
policeman_N : N ;
|
policeman_N : N ;
|
||||||
priest_N : N ;
|
priest_N : N ;
|
||||||
-- probable_AS : AS ;
|
probable_AS : A ;
|
||||||
queen_N : N ;
|
queen_N : N ;
|
||||||
radio_N : N ;
|
radio_N : N ;
|
||||||
-- rain_V0 : V0 ;
|
rain_V0 : V ;
|
||||||
read_V2 : V2 ;
|
read_V2 : V2 ;
|
||||||
red_A : A ;
|
red_A : A ;
|
||||||
religion_N : N ;
|
religion_N : N ;
|
||||||
|
|||||||
@@ -22,12 +22,18 @@ abstract Cat = {
|
|||||||
V ;
|
V ;
|
||||||
V2 ;
|
V2 ;
|
||||||
V3 ;
|
V3 ;
|
||||||
|
|
||||||
VV ;
|
VV ;
|
||||||
VS ;
|
VS ;
|
||||||
VQ ;
|
VQ ;
|
||||||
|
|
||||||
|
VA ;
|
||||||
|
V2A ;
|
||||||
|
|
||||||
AP ;
|
AP ;
|
||||||
|
|
||||||
Comp ;
|
Comp ;
|
||||||
|
SC ;
|
||||||
|
|
||||||
A ;
|
A ;
|
||||||
A2 ;
|
A2 ;
|
||||||
|
|||||||
@@ -2,13 +2,14 @@ abstract Sentence = Cat ** {
|
|||||||
|
|
||||||
fun
|
fun
|
||||||
|
|
||||||
PredVP : NP -> VP -> Cl ;
|
PredVP : NP -> VP -> Cl ;
|
||||||
|
PredSCVP : SC -> VP -> Cl ;
|
||||||
|
|
||||||
ImpVP : VP -> Imp ;
|
ImpVP : VP -> Imp ;
|
||||||
|
|
||||||
SlashV2 : NP -> V2 -> Slash ;
|
SlashV2 : NP -> V2 -> Slash ;
|
||||||
SlashVVV2 : NP -> VV -> V2 -> Slash ;
|
SlashVVV2 : NP -> VV -> V2 -> Slash ;
|
||||||
AdvSlash : Slash -> Adv -> Slash ;
|
AdvSlash : Slash -> Adv -> Slash ;
|
||||||
SlashPrep : Cl -> Prep -> Slash ;
|
SlashPrep : Cl -> Prep -> Slash ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,24 +4,33 @@ abstract Verb = Cat ** {
|
|||||||
UseV : V -> VP ;
|
UseV : V -> VP ;
|
||||||
ComplV2 : V2 -> NP -> VP ;
|
ComplV2 : V2 -> NP -> VP ;
|
||||||
ComplV3 : V3 -> NP -> NP -> VP ;
|
ComplV3 : V3 -> NP -> NP -> VP ;
|
||||||
|
|
||||||
ComplVV : VV -> VP -> VP ;
|
ComplVV : VV -> VP -> VP ;
|
||||||
ComplVS : VS -> S -> VP ;
|
ComplVS : VS -> S -> VP ;
|
||||||
ComplVQ : VQ -> QS -> VP ;
|
ComplVQ : VQ -> QS -> VP ;
|
||||||
|
|
||||||
ReflV2 : V2 -> VP ;
|
ComplVA : VA -> AP -> VP ;
|
||||||
PassV2 : V2 -> Comp ; --- overgen (V2 with prep)
|
ComplV2A : V2A -> NP -> AP -> VP ;
|
||||||
|
|
||||||
|
ReflV2 : V2 -> VP ;
|
||||||
|
PassV2 : V2 -> Comp ; --- overgen (V2 with prep)
|
||||||
|
|
||||||
UseComp : Comp -> VP ;
|
UseComp : Comp -> VP ;
|
||||||
|
|
||||||
AdvVP : VP -> Adv -> VP ; -- here
|
AdvVP : VP -> Adv -> VP ; -- here
|
||||||
AdVVP : AdV -> VP -> VP ; -- always
|
AdVVP : AdV -> VP -> VP ; -- always
|
||||||
|
|
||||||
UseVV : VV -> V2 ;
|
|
||||||
UseVQ : VQ -> V2 ;
|
|
||||||
UseVS : VS -> V2 ;
|
|
||||||
|
|
||||||
CompAP : AP -> Comp ;
|
CompAP : AP -> Comp ;
|
||||||
CompNP : NP -> Comp ;
|
CompNP : NP -> Comp ;
|
||||||
CompAdv : Adv -> Comp ;
|
CompAdv : Adv -> Comp ;
|
||||||
|
|
||||||
|
UseVV : VV -> V2 ;
|
||||||
|
UseVQ : VQ -> V2 ;
|
||||||
|
UseVS : VS -> V2 ;
|
||||||
|
|
||||||
|
EmbedS : S -> SC ;
|
||||||
|
EmbedQS : QS -> SC ;
|
||||||
|
EmbedVP : VP -> SC ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ concrete AdverbEng of Adverb = CatEng ** open ResEng, Prelude in {
|
|||||||
AdAdv = cc2 ;
|
AdAdv = cc2 ;
|
||||||
|
|
||||||
SubjS = cc2 ;
|
SubjS = cc2 ;
|
||||||
|
AdvSC s = s ;
|
||||||
|
|
||||||
AdnCAdv cadv = {s = cadv.s ++ "than"} ;
|
AdnCAdv cadv = {s = cadv.s ++ "than"} ;
|
||||||
|
|
||||||
|
|||||||
@@ -8,18 +8,18 @@ flags
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
airplane_N = regN "airplane" ;
|
airplane_N = regN "airplane" ;
|
||||||
-- answer_V2S = mkV2S (regV "answer") "to" ;
|
answer_V2S = mkV2S (regV "answer") "to" ;
|
||||||
apartment_N = regN "apartment" ;
|
apartment_N = regN "apartment" ;
|
||||||
apple_N = regN "apple" ;
|
apple_N = regN "apple" ;
|
||||||
art_N = regN "art" ;
|
art_N = regN "art" ;
|
||||||
-- ask_V2Q = mkV2Q (regV "ask") [] ;
|
ask_V2Q = mkV2Q (regV "ask") [] ;
|
||||||
baby_N = regN "baby" ;
|
baby_N = regN "baby" ;
|
||||||
bad_A = regADeg "bad" ;
|
bad_A = regADeg "bad" ;
|
||||||
bank_N = regN "bank" ;
|
bank_N = regN "bank" ;
|
||||||
beautiful_A = regADeg "beautiful" ;
|
beautiful_A = regADeg "beautiful" ;
|
||||||
-- become_VA = mkVA (irregV "become" "became" "become") ;
|
become_VA = mkVA (irregV "become" "became" "become") ;
|
||||||
beer_N = regN "beer" ;
|
beer_N = regN "beer" ;
|
||||||
-- beg_V2V = mkV2V (regDuplV "beg") [] "to" ;
|
beg_V2V = mkV2V (regDuplV "beg") [] "to" ;
|
||||||
big_A = regADeg "big" ;
|
big_A = regADeg "big" ;
|
||||||
bike_N = regN "bike" ;
|
bike_N = regN "bike" ;
|
||||||
bird_N = regN "bird" ;
|
bird_N = regN "bird" ;
|
||||||
@@ -65,7 +65,7 @@ lin
|
|||||||
dog_N = regN "dog" ;
|
dog_N = regN "dog" ;
|
||||||
door_N = regN "door" ;
|
door_N = regN "door" ;
|
||||||
drink_V2 = dirV2 (irregV "drink" "drank" "drunk") ;
|
drink_V2 = dirV2 (irregV "drink" "drank" "drunk") ;
|
||||||
-- easy_A2V = mkA2V (regA "easy") "for" ;
|
easy_A2V = mkA2V (regA "easy") "for" ;
|
||||||
eat_V2 = dirV2 (irregV "eat" "ate" "eaten") ;
|
eat_V2 = dirV2 (irregV "eat" "ate" "eaten") ;
|
||||||
empty_A = regADeg "empty" ;
|
empty_A = regADeg "empty" ;
|
||||||
enemy_N = regN "enemy" ;
|
enemy_N = regN "enemy" ;
|
||||||
@@ -79,7 +79,7 @@ lin
|
|||||||
fridge_N = regN "fridge" ;
|
fridge_N = regN "fridge" ;
|
||||||
friend_N = regN "friend" ;
|
friend_N = regN "friend" ;
|
||||||
fruit_N = regN "fruit" ;
|
fruit_N = regN "fruit" ;
|
||||||
-- fun_AV = mkAV (regA "fun") ;
|
fun_AV = mkAV (regA "fun") ;
|
||||||
garden_N = regN "garden" ;
|
garden_N = regN "garden" ;
|
||||||
girl_N = regN "girl" ;
|
girl_N = regN "girl" ;
|
||||||
glove_N = regN "glove" ;
|
glove_N = regN "glove" ;
|
||||||
@@ -128,7 +128,7 @@ lin
|
|||||||
oil_N = regN "oil" ;
|
oil_N = regN "oil" ;
|
||||||
old_A = regADeg "old" ;
|
old_A = regADeg "old" ;
|
||||||
open_V2 = dirV2 (regV "open") ;
|
open_V2 = dirV2 (regV "open") ;
|
||||||
-- paint_V2A = mkV2A (regV "paint") [] ;
|
paint_V2A = mkV2A (regV "paint") [] ;
|
||||||
paper_N = regN "paper" ;
|
paper_N = regN "paper" ;
|
||||||
peace_N = regN "peace" ;
|
peace_N = regN "peace" ;
|
||||||
pen_N = regN "pen" ;
|
pen_N = regN "pen" ;
|
||||||
@@ -137,10 +137,10 @@ lin
|
|||||||
play_V2 = dirV2 (regV "play") ;
|
play_V2 = dirV2 (regV "play") ;
|
||||||
policeman_N = regN "policeman" ;
|
policeman_N = regN "policeman" ;
|
||||||
priest_N = regN "priest" ;
|
priest_N = regN "priest" ;
|
||||||
-- probable_AS = mkAS (regA "probable") ;
|
probable_AS = mkAS (regA "probable") ;
|
||||||
queen_N = regN "queen" ;
|
queen_N = regN "queen" ;
|
||||||
radio_N = regN "radio" ;
|
radio_N = regN "radio" ;
|
||||||
-- rain_V0 = mkV0 (regV "rain") ;
|
rain_V0 = mkV0 (regV "rain") ;
|
||||||
read_V2 = dirV2 (irregV "read" "read" "read") ;
|
read_V2 = dirV2 (irregV "read" "read" "read") ;
|
||||||
red_A = regADeg "red" ;
|
red_A = regADeg "red" ;
|
||||||
religion_N = regN "religion" ;
|
religion_N = regN "religion" ;
|
||||||
|
|||||||
@@ -20,13 +20,15 @@ concrete CatEng of Cat = open ResEng, Prelude, (R = ParamX) in {
|
|||||||
s2 : Agr => Str
|
s2 : Agr => Str
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
V, VS, VQ = Verb ; -- = {s : VForm => Str} ;
|
V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
|
||||||
V2, VV = Verb ** {c2 : Str} ;
|
V2, VV, V2A = Verb ** {c2 : Str} ;
|
||||||
V3 = Verb ** {c2, c3 : Str} ;
|
V3 = Verb ** {c2, c3 : Str} ;
|
||||||
|
|
||||||
AP = {s : Agr => Str ; isPre : Bool} ;
|
AP = {s : Agr => Str ; isPre : Bool} ;
|
||||||
Comp = {s : Agr => Str} ;
|
Comp = {s : Agr => Str} ;
|
||||||
|
|
||||||
|
SC = {s : Str} ;
|
||||||
|
|
||||||
A = {s : AForm => Str} ;
|
A = {s : AForm => Str} ;
|
||||||
A2 = {s : AForm => Str ; c2 : Str} ;
|
A2 = {s : AForm => Str ; c2 : Str} ;
|
||||||
|
|
||||||
|
|||||||
@@ -258,8 +258,6 @@ oper
|
|||||||
-- Verbs and adjectives can take complements such as sentences,
|
-- Verbs and adjectives can take complements such as sentences,
|
||||||
-- questions, verb phrases, and adjectives.
|
-- questions, verb phrases, and adjectives.
|
||||||
|
|
||||||
V0, V2S, V2V, VA, V2A, V2Q : Type ; ----
|
|
||||||
|
|
||||||
mkV0 : V -> V0 ;
|
mkV0 : V -> V0 ;
|
||||||
mkVS : V -> VS ;
|
mkVS : V -> VS ;
|
||||||
mkV2S : V -> Str -> V2S ;
|
mkV2S : V -> Str -> V2S ;
|
||||||
@@ -270,13 +268,19 @@ oper
|
|||||||
mkVQ : V -> VQ ;
|
mkVQ : V -> VQ ;
|
||||||
mkV2Q : V -> Str -> V2Q ;
|
mkV2Q : V -> Str -> V2Q ;
|
||||||
|
|
||||||
AS, A2S, AV, A2V : Type ; ----
|
|
||||||
|
|
||||||
mkAS : A -> AS ;
|
mkAS : A -> AS ;
|
||||||
mkA2S : A -> Str -> A2S ;
|
mkA2S : A -> Str -> A2S ;
|
||||||
mkAV : A -> AV ;
|
mkAV : A -> AV ;
|
||||||
mkA2V : A -> Str -> A2V ;
|
mkA2V : A -> Str -> A2V ;
|
||||||
|
|
||||||
|
-- Notice: categories $V2S, V2V, V2A, V2Q$ are in v 1.0 treated
|
||||||
|
-- just as synonyms of $V2$, and the second argument is given
|
||||||
|
-- as an adverb. Likewise $AS, A2S, AV, A2V$ are just $A$.
|
||||||
|
-- $V0$ is just $V$.
|
||||||
|
|
||||||
|
V0, V2S, V2V, V2A, V2Q : Type ;
|
||||||
|
AS, A2S, AV, A2V : Type ;
|
||||||
|
|
||||||
|
|
||||||
--2 Definitions of paradigms
|
--2 Definitions of paradigms
|
||||||
--
|
--
|
||||||
@@ -431,18 +435,21 @@ oper
|
|||||||
mkVV v = v ** {c2 = "to" ; lock_VV = <>} ;
|
mkVV v = v ** {c2 = "to" ; lock_VV = <>} ;
|
||||||
mkVQ v = v ** {lock_VQ = <>} ;
|
mkVQ v = v ** {lock_VQ = <>} ;
|
||||||
|
|
||||||
{-
|
V0 : Type = V ;
|
||||||
mkV0 v = v ** {lock_V0 = <>} ;
|
V2S, V2V, V2Q, V2A : Type = V2 ;
|
||||||
mkV2S v p = mkV2 v p ** {lock_V2S = <>} ;
|
AS, A2S, AV : Type = A ;
|
||||||
mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2V = <>} ;
|
A2V : Type = A2 ;
|
||||||
|
|
||||||
|
mkV0 v = v ** {lock_V = <>} ;
|
||||||
|
mkV2S v p = mkV2 v p ** {lock_V2 = <>} ;
|
||||||
|
mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2 = <>} ;
|
||||||
mkVA v = v ** {lock_VA = <>} ;
|
mkVA v = v ** {lock_VA = <>} ;
|
||||||
mkV2A v p = mkV2 v p ** {lock_V2A = <>} ;
|
mkV2A v p = mkV2 v p ** {lock_V2A = <>} ;
|
||||||
mkV2Q v p = mkV2 v p ** {lock_V2Q = <>} ;
|
mkV2Q v p = mkV2 v p ** {lock_V2 = <>} ;
|
||||||
|
|
||||||
mkAS v = v ** {lock_AS = <>} ;
|
mkAS v = v ** {lock_A = <>} ;
|
||||||
mkA2S v p = mkA2 v p ** {lock_A2S = <>} ;
|
mkA2S v p = mkA2 v p ** {lock_A = <>} ;
|
||||||
mkAV v = v ** {lock_AV = <>} ;
|
mkAV v = v ** {lock_A = <>} ;
|
||||||
mkA2V v p = mkA2 v p ** {lock_A2V = <>} ;
|
mkA2V v p = mkA2 v p ** {lock_A2 = <>} ;
|
||||||
-}
|
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -17,6 +17,20 @@ concrete SentenceEng of Sentence = CatEng ** open ResEng in {
|
|||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
PredSCVP sc vp = {
|
||||||
|
s = \\t,a,b,o =>
|
||||||
|
let
|
||||||
|
agr = (agrP3 Sg).a ;
|
||||||
|
verb = vp.s ! t ! a ! b ! o ! agr ;
|
||||||
|
subj = sc.s ;
|
||||||
|
compl = vp.s2 ! agr
|
||||||
|
in
|
||||||
|
case o of {
|
||||||
|
ODir => subj ++ verb.fin ++ verb.inf ++ compl ;
|
||||||
|
OQuest => verb.fin ++ subj ++ verb.inf ++ compl
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
ImpVP vp = {
|
ImpVP vp = {
|
||||||
s = \\pol,n =>
|
s = \\pol,n =>
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
--# -path=.:prelude
|
--# -path=.:../abstract:../common:prelude
|
||||||
|
|
||||||
concrete TestEng of Test =
|
concrete TestEng of Test =
|
||||||
NounEng,
|
NounEng,
|
||||||
|
|||||||
@@ -7,10 +7,15 @@ concrete VerbEng of Verb = CatEng ** open ResEng in {
|
|||||||
ComplV2 v np = insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v) ;
|
ComplV2 v np = insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v) ;
|
||||||
ComplV3 v np np2 =
|
ComplV3 v np np2 =
|
||||||
insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
|
insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
|
||||||
|
|
||||||
ComplVV v vp = insertObj (\\a => v.c2 ++ infVP vp a) (predV v) ;
|
ComplVV v vp = insertObj (\\a => v.c2 ++ infVP vp a) (predV v) ;
|
||||||
ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;
|
ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;
|
||||||
ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
|
ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
|
||||||
|
|
||||||
|
ComplVA v ap = insertObj (ap.s) (predV v) ;
|
||||||
|
ComplV2A v np ap =
|
||||||
|
insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ;
|
||||||
|
|
||||||
UseComp comp = insertObj comp.s (predAux auxBe) ;
|
UseComp comp = insertObj comp.s (predAux auxBe) ;
|
||||||
|
|
||||||
AdvVP vp adv = insertObj (\\_ => adv.s) vp ;
|
AdvVP vp adv = insertObj (\\_ => adv.s) vp ;
|
||||||
@@ -26,4 +31,8 @@ concrete VerbEng of Verb = CatEng ** open ResEng in {
|
|||||||
CompNP np = {s = \\_ => np.s ! Acc} ;
|
CompNP np = {s = \\_ => np.s ! Acc} ;
|
||||||
CompAdv a = {s = \\_ => a.s} ;
|
CompAdv a = {s = \\_ => a.s} ;
|
||||||
|
|
||||||
|
EmbedS s = {s = conjThat ++ s.s} ;
|
||||||
|
EmbedQS qs = {s = qs.s ! QIndir} ;
|
||||||
|
EmbedVP vp = {s = infVP vp (agrP3 Sg).a} ; --- agr
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user