!"##$%&'(#)*#"+',$#-'./%#*)0#12 34 56)%'7'8*$9:)% ;"*:$/%<'=)4'>?@'>AAB
./C4*$&-#'>AAB'56)%'7'8*$9:)%D'7EE'F$&-#:'F":"*6"+D'
G
!"#$%&'(&)'*+%*+, H)3E"'/I'./%#"%#:DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD> JK*C/:"'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL M$0"%:$%&'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL N$:0E)$O"*:'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL J*"*"PK$:$#":DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDL N/,%E/)+$%&'./%#*)0#12DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD1 QK$E+$%&'#-"'./%#*)0#12'M$3*)*4DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDR .*")#$%&'#-"'J*/S"0#DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDR 7++$%&'(/K*0"'./+"')%+'M$3*)*$":DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB ./%I$&K*$%&'#-"'QK$E+'J)#-DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD? .*")#$%&'#-"'M$3*)*4'27F'T$E"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG> U:$%&'./%#*)0#12DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG1 .*")#$%&'#-"'J*/S"0#DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG1 7++$%&'M$3*)*$":DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG1 ./%I$&K*$%&'#-"'QK$E+'J)#-DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG1 V*$#$%&')%'WX)OCE"'J*/&*)ODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGB H-"'=4Q")%'.E)::DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDGB H-"'=)$%'.E)::DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG? FK%%$%&'#-"'WX)OCE"'J*/&*)ODDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDG?
>
-./0',%& H-$:'+/0KO"%#')$O:'#/'+":0*$3"'-/,'#/'&"##$%&':#)*#"+',$#-'./%#*)0#12@')'#//E'#-)#':KCC/*#:'+":$&%' 34'0/%#*)0#'C*/&*)OO$%&'$%'2)6)'Y')%+'E)#"*D
123%*,2*4& H-$:'+/0KO"%#'$:'E$0"%:"+'K%+"*')'.*")#$6"'./OO/%:'7##*$3K#$/%Z[/%0/OO"*0$)EZ(-)*"'7E$\"'LDA' M$0"%:"D'
52,3$"26%/,& H-/K&-'5'-)6"'+/%"'O4'3":#'#/')6/$+'$#@'#-$:'+/0KO"%#'O$&-#'0/%#)$%'"**/*:D'5'0)%%/#'3"'-"E+' *":C/%:$3E"'I/*')%4'"II"0#:'0)K:"+@'+$*"0#E4'/*'$%+$*"0#E4@'34'#-"'$%I/*O)#$/%'$%'#-$:'+/0KO"%#']'4/K' )*"'K:$%&'$#'/%'4/K*'/,%'*$:\D' (K3O$##$%&')%4':K&&":#$/%:@'/*':$O$E)*@'#-"'$%I/*O)#$/%':K3O$##"+'3"0/O":'O4'C*/C"*#4')%+'4/K' &$6"'O"'#-"'*$&-#'#/'K:"'#-"'$%I/*O)#$/%'$%',-)#"6"*',)4'5'I$%+':K$#)3E"@',$#-/K#'0/OC"%:)#$%&'4/K' $%')%4',)4D' 7EE'#*)+"O)*\:'$%'#-$:'+/0KO"%#')*"'C*/C"*#$":'/I'#-"$*'*":C"0#$6"'/,%"*')%+'+/'%/#'$OCE4' "%+/*:"O"%#'/I')%4'\$%+D' H-$:'+/0KO"%#'-):'3""%',*$##"%'$%'O4':C)*"'#$O"')%+'-):'%/'0/%%"0#$/%',-)#:/"6"*',$#-'O4' "OCE/4"*D'
-/%/%7.2,2+%, 7EE'+"6"E/CO"%#'$%'#-$:'+/0KO"%#',):'+/%"'K:$%&'W0E$C:"'LDLD>',$#-'7:C"0#2'+"6"E/CO"%#'#//E:' GDYD>@',-$0-'K:":'7:C"0#2'GDRDAD
L
5'8*$'"92*4&)'*+/"3+:; !/'#/'#-"'./%#*)0#12',"3ZC)&"')%+'+/,%E/)+'#-"'E)#":#'*"E"):"D'5%'O4'0):"'$#'$:'./%#*)0#12Y'ADBAD U%C)0\'#-"')*0-$6"')%+'#-*/,'),)4'#-"'./%#*)0#12'E$3*)*4'I$E"'%)O"+'^0/%#*)0#1SYDS)*_D
H-"'E/0)#$/%'/I'#-"'./%#*)0#12'E$3*)*4'I$E"'$%'#-"'K%C)0\"+'./%#*)0#12'+$:#*$3K#$/%D
V-4'#-*/,'),)4'#-"'./%#*)0#12'E$3*)*4` H-"'6"*:$/%'/I'./%#*)0#12'5'+/,%E/)+"+@'./%#*)0#12Y'ADBA@',):')CC)*"%#E4'0/OC$E"+',$#-'7:C"0#2' GDY@',-$0-'*"&*"#IKEE4'$:'$%0/OC)#$3E"',$#-'7:C"0#2'GDR@',-$0-'5')O'K:$%&@')#'#-"'#$O"'/I',*$#$%&'#-$:' +/0KO"%#D
1
W**/*:'E$\"'#-"'I/EE/,$%&',$EE'/00K*@',-"%'#*4$%&'#/'K:"'#-"'/*$&$%)E'E$3*)*4<
W**/*'/00K*$%&',-"%'#*4$%&'#/'K:"'#-"'/*$&$%)E'./%#*)0#12Y'ADBA'E$3*)*4',$#-'7:C"0#2'GDRD
(/@'$%'/*+"*'#/'K:"'./%#*)0#12@',"'-)6"'#/'3K$E+')'%",'6"*:$/%'/I'#-"'E$3*)*4D
Y
<.2$92*4&+=%&)'*+/"3+:;&12#/"/> Q"I/*"',"'0)%')0#K)EE4'K:"'./%#*)0#12@',"'%""+'#/'3K$E+'#-"'./%#*)0#12'E$3*)*4D'H-$:',$EE'3"'+/%"' K:$%&'W0E$C:"@'#/'O)\"'#-"'C*/0"::'"):$"*D
!"#$%&'()%*#)+",-#.% T$*:#',"'OK:#'0*")#"')'C*/S"0#'$%'W0E$C:"D'($%0"'./%#*)0#12'0/%#)$%:')'%KO3"*'/I'):C"0#:@',"'0*")#"' )%'7:C"0#2'C*/S"0#D'!/'#/'#-"'T$E"'O"%K@':"E"0#'#-"'[",'O"%K'$#"O')%+'#-"%':"E"0#'J*/S"0#'$%'#-"' :K3ZO"%K'#-)#')CC")*:D
T$*:#':#"C'$%'0*")#$%&'#-"'C*/S"0#'I/*'3K$E+$%&'#-"'./%#*)0#12'E$3*)*4']':"E"0#$%&'#-"'C*/S"0#'#4C"D
("E"0#'#-"'7:C"0#2'J*/S"0#'#4C"@'):':-/,%'$%'#-"'C$0#K*"')3/6"')%+'#-"%'0E$0\'#-"'["X#'3K##/%D
R
7#'#-$:':#)&"@',"'0)%'%)O"'#-"'C*/S"0#')%+'0/%I$&K*"'#-"'2)6)'6"*:$/%'$#'K:":D'5'0-//:"'#/'%)O"'#-"' C*/S"0#'^./%#*)0#12Y_')%+'K:"'#-"'+"I)KE#'2)6)'6"*:$/%D
("0/%+':#"C'/I'0*")#$%&'#-"'W0E$C:"'C*/S"0#'I/*'3K$E+$%&'#-"'./%#*)0#12'E$3*)*4D
.E$0\'#-"'T$%$:-'3K##/%D H-"'C*/S"0#'0*")#$/%'$:'%/,'I$%$:-"+@'#-"'%"X#':#"C'$:'#/')++':/K*0"'0/+"')%+'E$3*)*$":'#/'#-"'C*/S"0#D
a
/00&'()1,2".#)!,0#)$'0)3&4"$" V"'OK:#'%/,'E")6"'W0E$C:"'I/*')',-$E"@'$%'/*+"*'#/'0/C4'#-"':/K*0"'0/+"')%+'#-"'E$3*)*$":'I*/O'#-"' ./%#*)0#12'+$:#*$3K#$/%'+$*"0#/*4'#/'#-"'W0E$C:"'C*/S"0#'SK:#'0*")#"+D (#)*#'34'E/0)#$%&'#-"'C*/S"0#'+$*"0#/*@'K:K)EE4'E/0)#"+'$%'#-"'W0E$C:"',/*\:C)0"D'5%'#-$:'+$*"0#/*4@' 0*")#"')'%",'+$*"0#/*4'%)O"+'^E$3_D T*/O'#-"'+$*"0#/*4'$%'#-"'./%#*)0#12'+$:#*$3K#$/%':-/,%'$%'#-"'C$0#K*"'3"E/,@'0/C4')EE'/I'#-"'27F' I$E":'#/'#-"'^E$3_'+$*"0#/*4',"'SK:#'0*")#"+'$%'#-"'C*/S"0#D
M/0)#$/%'/I'#-"'E$3*)*$":'*"PK$*"+'#/'3K$E+'#-"'./%#*)0#12'E$3*)*4'$%'#-"'./%#*)0#12'+$:#*$3K#$/%'+$*"0#/*4D
["X#'0/C4'#-"'0/%#"%#:'/I'#-"'^:*0_'I/E+"*@'E/0)#"+'$OO"+$)#"E4'3"E/,'#-"'^E$3_'I/E+"*'$%'#-"')3/6"' C$0#K*"@'#/'#-"'^:*0_'I/E+"*'$%'#-"'W0E$C:"'C*/S"0#D
B
5I',"'%/,'&/'3)0\'#/'W0E$C:"@':"E"0#'#-"'C*/S"0#')%+'C*"::'#-"'TY'\"4@'$%'/*+"*'#/'*"I*":-'#-"'C*/S"0#' 0/%#"%#:@'#-"'C*/S"0#':-/KE+'%/,'E//\:':/O"#-$%&'E$\"'#-$:'$%'#-"'J*/S"0#'3*/,:"*<
H-"'./%#*)0#12'E$3*)*4'C*/S"0#'$%'W0E$C:"')I#"*'-)6$%&')++"+'#-"'E$3*)*$":')%+'#-"':/K*0"'0/+"D
7:'0)%'3"':""%@'#-"*"')*"'0/OC$E)#$/%'"**/*:']'#-$:'$:'3"0)K:"'#-"'E$3*)*$":'-)6"%b#'3""%')++"+'#/'#-"' 2)6)'3K$E+'C)#-'4"#D
!,'6&(2"&'()%*#)72&80)+$%* F$&-#Z0E$0\'/%'#-"'C*/S"0#'%)O"')%+':"E"0#'QK$E+'J)#-'$%'#-"'O"%K'#-)#')CC")*:')%+'#-"%'./%I$&K*"' QK$E+'J)#-'$%'#-"':K3ZO"%KD
Q*$%&$%&'KC'#-"'QK$E+'J)#-'0/%I$&K*)#$/%'+$)E/&'I/*'#-"'./%#*)0#12'E$3*)*4'C*/S"0#'$%'W0E$C:"D
?
5%'#-"',$%+/,'#-)#')CC")*:@'0E$0\'#-"'7++'27F:'3K##/%'/%'#-"'*$&-#D 7%/#-"*',$%+/,')CC")*:@'$%',-$0-',"'0)%':"E"0#'#-"'27F'I$E":'#/')++'#/'#-"'3K$E+'C)#-D'cC"%'#-"' ./%#*)0#12'E$3*)*4'C*/S"0#')%+'#-"'^E$3_'I/E+"*',$#-$%'#-"'C*/S"0#D'H-"%':"E"0#')EE'#-"'E$3*)*4'I$E":'4/K' SK:#'0/C$"+'$%#/'#-"'C*/S"0#D'H-"'*":KE#':-/KE+'E//\'E$\"'#-$:<
("E"0#$%&'#-"'27F'I$E":'#/')++'#/'#-"'./%#*)0#12'E$3*)*4'C*/S"0#b:'3K$E+'C)#-D
V-"%'I$%$:-"+@'0E$0\'#-"'c8'3K##/%D
GA
H-"'2)6)'QK$E+'J)#-',$%+/,':-/KE+'%/,'E//\':/O"#-$%&'E$\"'#-$:<
2)6)'QK$E+'J)#-',$%+/,')I#"*'-)6$%&')++"+'#-"'*"PK$*"+'E$3*)*$":'#/'#-"'./%#*)0#12'E$3*)*4'C*/S"0#D
.E$0\'#-"'c8'3K##/%D H-"'C*/S"0#':-/KE+'%/,'0/OC$E"',$#-/K#')%4'"**/*:D
GG
!"#$%&'()%*#)3&4"$"9):&8# ("E"0#'#-"'./%#*)0#12'E$3*)*4'C*/S"0#'$%'#-"'W0E$C:"'C*/S"0#'3*/,:"*'34'0E$0\$%&'/%'$#'/%0"D 5%'#-"'T$E"'O"%K@':"E"0#'#-"'WXC/*#'O"%K'$#"O']')',$%+/,')EE/,$%&'4/K'#/':"E"0#',-)#'#/'"XC/*#' :-/KE+')CC")*@'E//\$%&'E$\"'#-$:<
T$*:#':#"C'$%'0*")#$%&'#-"'./%#*)0#12'E$3*)*4']':"E"0#$%&'"XC/*#'#/'27F'I$E"D
.E$0\'#-"'["X#'3K##/%D
G>
5%'#-"'I/EE/,$%&',$%+/,',"',$EE':"E"0#'#-"'*":/K*0":'#-)#')*"'#/'3"'"XC/*#"+'#/'#-"'./%#*)0#12' E$3*)*4D
("E"0#$%&'#-"'*":/K*0":'#/'3"'"XC/*#"+'#/'#-"'./%#*)0#12'E$3*)*4D ! ! ! ! !
Q"&$%'34'+"Z:"E"0#$%&'#-"'D0E)::C)#-')%+'DC*/S"0#'*":/K*0":'/%'#-"'*$&-#D .E$0\'/%'#-"':O)EE'#*$)%&E"'#/'#-"'E"I#'/I'#-"'./%#*)0#12'E$3*)*4'C*/S"0#':/'4/K'0)%':""'#-"' ^:*0_')%+'^E$3_'I/E+"*:D N"Z:"E"0#'#-"'^E$3_'I/E+"*@'):':-/,%'$%'#-"'C$0#K*"D ("E"0#'#-"'+":#$%)#$/%',-"*"'#-"'./%#*)0#12'E$3*)*4'I$E"',$EE'3"':)6"+')%+',-)#'%)O"'$#',$EE' -)6"'34'K:$%&'#-"'Q*/,:"'3K##/%'/%'#-"'E"I#D .E$0\'#-"'T$%$:-'3K##/%'#/'0*")#"'#-"'E$3*)*4D GL
W0E$C:"',$EE'0/OCE)$%')3/K#':/O"'"**/*@'3K#'#-$:',$EE'%/#')II"0#'#-"'*":KE#'/I'#-"'3K$E+']'SK:#'0E$0\'#-"' c8'3K##/%'$%'#-"'"**/*'+$)E/&'#/'0/%#$%K"D [/,',"')*"'*")+4'#/'K:"'./%#*)0#12d
?,2*4&)'*+/"3+:; [/,',"',$EE',*$#"')':O)EE'C*/&*)O'#-)#'K:":'./%#*)0#12@'$%'/*+"*'#/'&"#')'&E$OC:"'/I'-/,'$#',/*\:D H-$:'"X)OCE"'$:'34'%/'O")%:'"X-)K:#$6"')%+':-/KE+'%/#':"*6"'):'O/*"'#-)%')'6"*4'3*$"I'$%#*/+K0#$/%' #/':/O"'/I'#-"'I")#K*":'/I'./%#*)0#12D
!"#$%&'()%*#)+",-#.% 5%'#-"':)O"',)4'):',"'+$+',-"%'0*")#$%&'#-"'C*/S"0#'I/*'#-"'./%#*)0#12'E$3*)*4'+":0*$3"+')3/6"@' 0*")#"')'%",'7:C"0#2'C*/S"0#@'3K#'&$6"'$#')%/#-"*'%)O"D'5'0-/:"'#-"'%)O"'^T$*:#./%#*)0#12WX)OCE"_D
/00&'()3&4"$" M")6"'W0E$C:"'I/*')'O/O"%#'#/'0*")#"')'^E$3_'+$*"0#/*4'$%'#-"'"X)OCE"'C*/&*)O'C*/S"0#'+$*"0#/*4')%+' #-"%'0/C4'#-"'*"PK$*"+'E$3*)*$":@'):'+":0*$3"+'$%')3/6"D'H-"'./%#*)0#12'E$3*)*4',"'0*")#"+'OK:#')E:/' 3"'0/C$"+'#/'#-"'C*/S"0#'^E$3_'+$*"0#/*4D e)6$%&'0/OCE"#"+'#-$:':#"C@'#-"'^E$3_'+$*"0#/*4':-/KE+'%/,'0/%#)$%'#-"'$#"O:'):':-/,%'$%'#-"' I/EE/,$%&'C$0#K*"<
H-"'"X)OCE"'C*/&*)O'^E$3_'+$*"0#/*4',$#-')EE'#-"'*"PK$*"+'E$3*)*$":'$%'CE)0"D
H-"'./%#*)0#12'E$3*)*4'5'3K$E#'$:'%)O"+'^0/%#*)0#1SDS)*_'$%'#-"')3/6"'C$0#K*"D
!,'6&(2"&'()%*#)72&80)+$%* ["X#',"'*"#K*%'#/'W0E$C:"')%+')++'#-"'E$3*)*$":',"'SK:#'0/C$"+'$%#/'#-"'^E$3_'+$*"0#/*4'#/'#-"'C*/S"0#D' H-"'C*/0"+K*"'I/*')++$%&'E$3*)*$":'#/')'C*/S"0#',):'+":0*$3"+'$%'#-"':"0#$/%'./%I$&K*$%&'#-"'QK$E+' J)#-')3/6"D H-"'*":KE#':-/KE+'3"'#-"':)O"@',$#-'#-"')++$#$/%'/I'#-"'./%#*)0#12'E$3*)*4'27FD
G1
5%')++$#$/%'#/')++$%&'#-"'E$3*)*$":'#/'#-"'2)6)'3K$E+'C)#-@',"')E:/'-)6"'#/')++'#-"'./%#*)0#12'E$3*)*4' #/'#-"'7:C"0#2''$%ZC)#-D H-$:'$:'+/%"'34'*$&-#Z0E$0\$%&'/%'#-"'"X)OCE"'C*/&*)O'C*/S"0#'$%'#-"'W0E$C:"'C*/S"0#'3*/,:"*')%+' :"E"0#$%&'J*/C"*#$":D'H-"%':"E"0#'#-"'7:C"0#2'QK$E+'$#"O'$%'#-"'E$:#'/%'#-"'E"I#D'H-"',$%+/,':-/KE+' %/,'E//\'E$\"'#-$:<
./%I$&K*$%&'#-"'7:C"0#2'$%ZC)#-'$%'W0E$C:"'I/*'#-"'"X)OCE"'C*/&*)O'C*/S"0#D
GY
.E$0\'#-"'7++'27F:'3K##/%'/%'#-"'*$&-#D'5%'#-"',$%+/,'#-)#')CC")*:@'"XC)%+'#-"'"X)OCE"'C*/S"0#' %/+"'34'0E$0\$%&'#-"':O)EE'#*$)%&E"'#/'#-"'E"I#'/I'#-"'%)O"')%+'#-"%'"XC)%+'#-"'^E$3_'+$*"0#/*4'$%'#-"' "X)OCE"'C*/&*)O'C*/S"0#D'H-"',$%+/,':-/KE+'%/,'E//\'E$\"'#-$:<
7++$%&'#-"'./%#*)0#12'E$3*)*4'#/'#-"'7:C"0#2'$%ZC)#-'/I'#-"'"X)OCE"'C*/&*)O'C*/S"0#']':"E"0#$%&'#-"'E$3*)*4D
("E"0#'#-"'./%#*)0#12'E$3*)*4')%+'0E$0\'#-"'c8'3K##/%D
GR
H-"'*"O)$%$%&',$%+/,':-/KE+'%/,'E//\'E$\"'#-$:<
./%I$&K*$%&'#-"'7:C"0#2''$%ZC)#-'$%'W0E$C:"'I/*'#-"'"X)OCE"'C*/&*)O'C*/S"0#D H-"'./%#*)0#12'E$3*)*4'-):'3""%')++"+'#/'#-"'7:C"0#2'$%ZC)#-D
[/#"'#-)#'#-"'./%#*)0#12'E$3*)*4':-/KE+'3"')++"+'#/'#-"'$%ZC)#-@'%/#'#-"'7:C"0#'J)#-d .E$0\'#-"'c8'3K##/%D
Ga
;"&%&'()$')<=$>?8#)+",("$> T$%)EE4@',"'0)%':#)*#',*$#$%&'#-"'"X)OCE"'C*/&*)O@',-$0-'SK:#'0/%:$:#:'/I'#,/'0E)::":f')'0E)::',$#-' :/O"'C*/C"*#$":'#-)#'0)%'3"':"#')%+'*"#*$"6"+')%+')'O)$%'0E)::',-$0-'0*")#":')%+'K:":'#-"'C*"6$/K:' 0E)::D
!=%&@><%"*&)$",, T$*:#@'#-"'0E)::'0/%#)$%$%&'#-"'C*/C"*#$":< package com.ivan; import org.contract4j5.contract.Contract; import org.contract4j5.contract.Invar; import org.contract4j5.contract.Pre; @Contract public class MyBean { /** Some count that must be within a certain range. */ @Invar(value="mCount > 0 && mCount < 20", message="Count must be between 1 and 20") private int mCount = 1; /** A string that can't be set to null or the empty string. */ private String mString = "default"; public int getCount() { return mCount; } public void setCount(int inCount) { mCount = inCount; } public String getString() { return mString; }
}
@Pre(value="inString != null && inString.size() > 0") public void setString(String inString) { mString = inString; }
H-"'!"#$%&'0E)::'/I'#-"'"X)OCE"'C*/&*)O'#-)#'K:":'./%#*)0#12D
5%'#-$:'0E)::@'#-"*"')*"')'%KO3"*'/I'./%#*)0#12')%%/#)#$/%:D'7'6"*4'3*$"I'$%#*/+K0#$/%',$EE'3"'&$6"%' I/*'")0-@'CE"):"'*"I"*'#/'#-"'./%#*)0#12',"3':$#"'I/*'O/*"'0/OCE"#"'+/0KO"%#)#$/%D ! g./%#*)0# 7EE'0E)::":')%+'$%#"*I)0":'#-)#'+"0E)*":'/%"'/*'O/*"'0/%#*)0#:'OK:#'3"')%%/#)#"+',$#-'#-$:' )%%/#)#$/%D'5I'%/#@'#-"'0/%#*)0#:',$EE'3"'$&%/*"+D ! g5%6)*h6)EK"i_O./K%#'j'A'kk'O./K%#'l'>A_'O"::)&"i_./K%#'OK:#'3"'3"#,""%'G')%+' >A_m H-$:')%%/#)#$/%'+"0E)*":'#-"'0/%#*)0#'I/*'#-"'O./K%#'$%:#)%0"'6)*$)3E"')%+':C"0$I$":'#-"' O"::)&"'#-)#',$EE'3"'&$6"%'$I'#-$:'0/%#*)0#'$:'3*/\"%D ! gJ*"h6)EK"in$%(#*$%&'di'%KEE'kk'$%(#*$%&D:$9"hm'j'Anm H-$:')%%/#)#$/%'+"0E)*":')'C*"Z0/%+$#$/%'0/%#*)0#'#/'#-"''$()(*+&,'O"#-/+@',-$0-':)4:'#-)#' #-"':KCCE$"+':#*$%&'OK:#'%/#'3"'%KEE')%+'OK:#'%/#'3"')%'"OC#4':#*$%&D
GB
!=%&@"2*&)$",, H-"'!%+&'0E)::'0*")#":')%'$%:#)%0"'/I'#-"'!"#$%&'0E)::')%+'#*$":'#/':"#':/O"'6)EK":'#-)#',$EE'6$/E)#"' #-"'0/%#*)0#:'#-)#',"*"':C"0$I$"+D package com.ivan; public class Main { public static void main(String[] inArgs) { MyBean theBean = new MyBean(); System.out.println("BEFORE"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString()); theBean.setCount(25); theBean.setString("");
}
}
System.out.println("\nAFTER"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString());
H-"'!%+&'0E)::'/I'#-"'"X)OCE"'C*/&*)O'#-)#'K:":'./%#*)0#12D
@2''&'()%*#)<=$>?8#)+",("$> [/':C"0$)E'C*"C)*)#$/%:')*"'%""+"+'$%'/*+"*'#/'*K%'#-"'"X)OCE"'C*/&*)O@'SK:#'*$&-#Z0E$0\'/%'#-"' C*/S"0#')%+':"E"0#'FK%'7:')%+'#-"%'7:C"0#2o2)6)'7CCE$0)#$/%@'):':-/,%'$%'#-"'I/EE/,$%&'C$0#K*"D
FK%%$%&'#-"'"X)OCE"'C*/&*)OD
G?
5%'#-$:'I$*:#'6"*:$/%@'#-"'C*/&*)O',$EE'&"%"*)#"'#-"'I/EE/,$%&'0/%:/E"'/K#CK#< BEFORE Count = 1 String = default [FATAL] DefaultContractEnforcer: *** Contract Failure (MyBean.java:41): Invar test "mCount > 0 && mCount < 20" for "com.ivan.MyBean" failed. Count must be between 1 and 20 [failure cause = null] Exception in thread "main" org.contract4j5.errors.ContractError: *** Contract Failure (MyBean.java:41): Invar test "mCount > 0 && mCount < 20" for "com.ivan.MyBean" failed. Count must be between 1 and 20 [failure cause = null] at org.contract4j5.enforcer.ContractEnforcerHelper.makeContractError(ContractEnforcerHelper .java:183) at org.contract4j5.enforcer.defaultimpl.DefaultContractEnforcer.finishFailureHandling(Defau ltContractEnforcer.java:29) at org.contract4j5.enforcer.ContractEnforcerHelper.handleFailure(ContractEnforcerHelper.jav a:110) at org.contract4j5.enforcer.ContractEnforcerHelper.invokeTest(ContractEnforcerHelper.java:9 2) at com.ivan.MyBean.mCount_aroundBody5$advice(MyBean.java:190) at com.ivan.MyBean.setCount(MyBean.java:41) at com.ivan.Main.main(Main.java:34)
./%:/E"'/K#CK#'I*/O'#-"'I$*:#')##"OC#')#'*K%%$%&'#-"'"X)OCE"'C*/&*)O'K:$%&'./%#*)0#12D
V"'0)%':""'#-)#'#-"'+"I)KE#'6)EK":'/I'#-"')##*$3K#":'$%'#-"'$%:#)%0"'/I'#-"'!"#$%&'0E)::')*"'C*$%#"+' /%#/'#-"'0/%:/E"@'3K#'#-"%')%'"X0"C#$/%'/00K*:D'V-"%'./%#*)0#12'+"#"0#:')'3*")0-'/I')'0/%#*)0#@'#-"' C*/&*)O',$EE'$OO"+$)#"E4'3"':#/CC"+')%+')'O"::)&"':C"0$I4$%&',-$0-'0/%#*)0#',):'3*/\"%'/K#CK#' #/'#-"'0/%:/E"D' [/#"'#-"'-$&-E$&-#"+'#"X#@',-$0-'$:'#-"'O"::)&"'#-)#',"'"%#"*"+'$%'#-"'0/%#*)0#D 7E:/'%/#"'#-)#'#-"'E$%"'%KO3"*:'$%'#-"')3/6"'0/%:/E"'/K#CK#'+/'%/#'O)#0-'#-"'E$%"'%KO3"*:'$%'#-"' C*"6$/K:':/K*0"'I$E"D'H-$:':$%0"'O/:#'0/OO"%#:'-)6"'3""%'*"O/6"+'I*/O'#-"':/K*0"'0/+"@'#/' 0/%:"*6"':C)0"'$%'#-$:'+/0KO"%#D H/'*"0#$I4'#-"'0/%#*)0#'3*")0-@'#-"'C)*)O"#"*'/I'#-"''$(-./&('O"#-/+'$:'0-)%&"+'#/'G?D'H-"'0%+&1 O"#-/+'$%'#-"'!%+&'0E)::',$EE'%/,'E//\'E$\"'#-$:< ... public static void main(String[] inArgs) { MyBean theBean = new MyBean(); System.out.println("BEFORE"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString()); theBean.setCount(19); theBean.setString("");
} ...
System.out.println("\nAFTER"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString());
H-"'O/+$I$"+'0%+&'O"#-/+'/I'#-"'!%+&'0E)::D
>A
5I',"'#*4'#/'*K%'#-"'"X)OCE"'C*/&*)O'/%0"')&)$%@'$#',$EE'%/,'&"%"*)#"'#-"'I/EE/,$%&'0/%:/E"'/K#CK#< BEFORE Count = 1 String = default [FATAL] DefaultContractEnforcer: *** Contract Failure (MyBean.java:50): Pre test "inString != null && inString.size() > 0" for "setString" failed. [failure cause = null] Exception in thread "main" org.contract4j5.errors.ContractError: *** Contract Failure (MyBean.java:50): Pre test "inString != null && inString.size() > 0" for "setString" failed. [failure cause = null] at org.contract4j5.enforcer.ContractEnforcerHelper.makeContractError(ContractEnforcerHelper .java:183) at org.contract4j5.enforcer.defaultimpl.DefaultContractEnforcer.finishFailureHandling(Defau ltContractEnforcer.java:29) at org.contract4j5.enforcer.ContractEnforcerHelper.handleFailure(ContractEnforcerHelper.jav a:110) at org.contract4j5.enforcer.ContractEnforcerHelper.invokeTest(ContractEnforcerHelper.java:9 2) at org.contract4j5.aspects.MethodBoundaryConditions.ajc$before$org_contract4j5_aspects_Meth odBoundaryConditions$1$d79ef325(MethodBoundaryConditions.aj:121) at com.ivan.MyBean.setString(MyBean.java:52) at com.ivan.Main.main(Main.java:35)
./%:/E"'/K#CK#'I*/O'#-"':"0/%+')##"OC#')#'*K%%$%&'#-"'"X)OCE"'C*/&*)O'K:$%&'./%#*)0#12D
H-$:'#$O"@'%/':C"0$)E'O"::)&"'$:'+$:CE)4"+@':$%0"'%/'O"::)&"',):'+"I$%"+'I/*'#-"'0/%#*)0#'#-)#'-):' 3""%'3*/\"%'#-$:'#$O"D'V"'0)%@'-/,"6"*@':""'#-)#'#-"'0/%#*)0#'3*/\"%'$:'I/*'#-"''$()(*+&,'O"#-/+'$%' #-"'!"#$%&'0E)::D c%0"')&)$%',"'O/+$I4'#-"'0%+&'O"#-/+'/I'#-"'!%+&'0E)::@':/'#-)#'#-"'C)*)O"#"*'#/'#-"''$()(*+&,1 O"#-/+'+/":'%/#'3*")\'#-"'0/%#*)0#'I/*'#-"'O"#-/+D'H-"'0%+&'O"#-/+'%/,'E//\:'E$\"'#-$:< ... public static void main(String[] inArgs) { MyBean theBean = new MyBean(); System.out.println("BEFORE"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString()); theBean.setCount(19); theBean.setString("test");
} ...
System.out.println("\nAFTER"); System.out.println("Count = " + theBean.getCount()); System.out.println("String = " + theBean.getString());
H-"'O/+$I$"+'0%+&'O"#-/+'/I'#-"'!%+&'0E)::D
7'I$%)E')##"OC#')#'*K%%$%&'#-"'"X)OCE"'C*/&*)O'%/,'*"%+"*:'#-"'I/EE/,$%&'0/%:/E"'/K#CK#< BEFORE Count = 1 String = default AFTER Count = 19 String = test
./%:/E"'/K#CK#'I*/O'#-"'#-$*+')##"OC#')#'*K%%$%&'#-"'"X)OCE"'C*/&*)O'K:$%&'./%#*)0#12D
[/'0/%#*)0#:')*"'3*/\"%')%+'#-"'"X)OCE"'C*/&*)O'0)%'"X"0K#"'%/*O)EE4D
>G